簡體   English   中英

如何從hadoopish文件夾加載鑲木地板文件

[英]How to load parquet files from hadoopish folder

如果我以這種方式在Java中保存數據幀,則...:

df.write().parquet("myTest.parquet");

...,然后以強光方式保存(包含許多文件的文件夾)。

是否可以將數據幀保存為單個文件? 我嘗試了collect() ,但沒有幫助。

如果不可能,那么我的問題是我應該如何更改從df.write().parquet("myTest.parquet")創建的df.write().parquet("myTest.parquet")文件夾中讀取Parquet文件的Python代碼:

load_df = sqlContext.read.parquet("myTest.parquet").where('field1="aaa"').select('field2', 'field3').coalesce(64)

是否可以將數據幀保存為單個文件?

是的,但是您不應該這樣做,因為您可能會對單個JVM施加太大的壓力,這不僅會導致性能下降,還會導致JVM終止,從而導致整個Spark應用程序故障。

因此,是的,有可能,您應該repartition(1)具有單個分區:

repartition(numPartitions:Int):數據集[T]返回一個具有完全numPartitions分區的新數據集。


我應該如何更改從hadoopish文件夾讀取Parquet文件的Python代碼

從您所謂的“ hadoopish”文件夾中加載數據集完全不必關心內部結構,而應將其視為單個文件(即幕后目錄)。

這是文件存儲方式的內部表示 ,並不影響代碼的加載。

Spark將您的文件寫入一個目錄中,正如您所說的,該文件數量眾多,如果寫入操作成功,它將保存另一個名為_SUCCESS空文件

我來自scala,但我確實相信python中也有類似的方式

parquetjson或任何您想要的格式直接保存和讀取文件:

df.write.parquet("path")
loaddf = spark.read.parquet("path")

我嘗試了collect(),但沒有幫助。

談到collect ,在此類操作中使用它不是一個好習慣,因為它將數據返回給驅動程序,因此您將失去並行計算的好處,並且如果數據無法容納在內存中,則會導致OutOfMemoryException

是否可以將數據幀保存為單個文件?

在大多數情況下,您實際上不需要這樣做,如果是這樣,請在保存數據Dataframe之前使用Dataframe repartition(1)方法

希望對您有幫助,最好的問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM