2017-01-05 80 views
0

我在S3中以文本格式(.gz)有一個數據集,我正在使用spark.read.csv將文件讀入火花。火花如何讀取文本格式文件

這是大約100GB的數據,但它包含150列。我只使用5列(所以我減少了數據的寬度),我只選擇了5列。

對於這種場景,確實能夠掃描完整的100GB數據,或者它巧妙地只過濾這5列而不掃描所有列(如列狀格式)?

任何幫助,將不勝感激。

imp_feed = spark.read.csv('s3://mys3-loc/input/', schema=impressionFeedSchema, sep='\t').where(col('dayserial_numeric').between(start_date_imp,max_date_imp)).select("col1","col2","col3","col4") 
+0

請添加從S3讀取數據的代碼,然後選擇列。 – Yaron

+2

你在開玩笑嗎? CSV不是*列式格式,您必須按字節逐字節解析,以檢測列/記錄分隔符。另外,GZip壓縮文件必須按位逐位解壓縮。另外,AFAIK,S3文件不是爲隨機訪問而設計的。 –

+0

是的,這就是我的恐懼。我們的日常加載到S3,他們是文本和GZip格式。所以,基本上它完全處於火花之中(更多的,gzip文件在解壓縮後會長到5到6倍) – braj259

回答

0

在您的工作流程的第1步中,讀取CSV文件並將其保存爲快速壓縮的ORC或實木複合地文件。

然後轉到誰創建這些文件,並告訴他們停止它。至少,他們應該切換到Avro + Snappy,因爲這更容易將初始分析和遷移分割爲列狀格式。