0

我試圖從谷歌雲存儲或谷歌BigQuery中加載數千兆字節的數據到熊貓數據框中,以便我可以嘗試運行scikit的OneClassSVM和隔離林(或任何其他一元或PU分類)。所以,我想pandas-gbq但嘗試運行如何將Google雲端存儲中的千兆字節數據加載到熊貓數據框中?

pd.read_gbq(query, 'my-super-project', dialect='standard') 

使我的機器SIGKILL這是隻有30%完成時。而且我無法在本地加載它,而且我的機器沒有足夠的空間,也沒有合理的效率。

我也曾嘗試

from google.cloud import storage 
client = storage.Client() 
bucket = client.get_bucket('bucket-id-here') 
# Then do other things... 
blob = bucket.get_blob('remote/path/to/file.txt') 
print(blob.download_as_string()) 

在我可以加載1/10或我的可用數據的1/5,但後來我的機器終於告訴我,這耗盡了內存。

TLDR:有,我可以運行我的自定義代碼(與numpy的,熊貓,甚至TensorFlow)在雲中還是有些farway超級計算機,我可以很容易地和有效地從谷歌雲存儲服務或谷歌加載數據的方法BigQuery的?

+0

不幸的是,我無法找到一個'read_gbq()'函數,但是如果你下載的文件在本地,你可以嘗試[dask.dataframe](http://dask.pydata.org/en/latest/dataframe .html),它在語法上與熊貓類似,但是在覈外進行操作,所以內存不應該成爲問題。 –

+0

@DavidDuffrin我無法下載,因爲我的機器沒有足夠的硬盤空間。 – Flair

+0

你能上傳文件(縣)[AWS的EMR(https://aws.amazon.com/emr/),並用類似[PySpark(https://spark.apache.org/docs操縱數據/0.9.0/python-programming-guide.html)?過去我使用Hadoop來處理類似的「大數據」應用程序。 –

回答

3

我不太認爲你正朝着正確的方向前進。我會試着解釋我通常如何處理數據,希望這會給你一些見解。

我首先傾向於通過應用一些抽樣技術或查詢較少的日子來處理小數據集。在這一步中,可以使用pandas或爲小數據開發的其他工具和構建模型,提出一些統計信息,找到moments等等。

當我瞭解了一些數據之後,我開始使用大數據工具。

具體來說,我有一個非常小的Dataproc集羣,我已經設置了jupyter notebook來運行pyspark的代碼。

您的羣集的總內存將不得不超過您用作輸入的總內存。

使用無論是熊貓或火花dataframes應該是你簡單,因爲你可以通過databricks在此blog post看到,火花已經提供了這個功能。

之後,實現算法。 Spark已經提供了一些built-in algorithms開箱即用,你可以隨身攜帶。

如果您要實現的算法不可用,您可以在其存儲庫中發出請求或自己構建請求(您可以使用Python的Scipy實現作爲指導並將其轉置到Spark環境中)。

這裏是我如何加載數據,我用它來構建一個推薦系統爲我公司的算法中的一個例子:

from pyspark.sql import functions as sfunc 
from pyspark.sql import types as stypes 

schema = stypes.StructType().add("fv", stypes.StringType()).add("sku", stypes.StringType()).add("score", stypes.FloatType()) 
train_df = spark.read.csv('gs://bucket_name/pyspark/train_data*.gz', header=True, schema=schema) 

星火將橫跨你可以在不同的工人自動分發本資料的簇。之後,我主要運行查詢和映射/減少步驟來獲得skus之間的相關性。

就維護您當前的代碼而言,它可能不會針對大數據進行擴展。儘管如此,你仍然可以找到很多將numpy的力量與火花相結合的資源,例如this example

相關問題