如何从 hadoopish 文件夹加载镶木地板文件

How to load parquet files from hadoopish folder

如果我在 Java 中以这种方式保存数据框,...:[=​​14=]

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

...,然后以 hadoopish 方式保存(包含大量文件的文件夹)。

是否可以将数据框保存为单个文件?我试过 collect(),但没有用。

如果不可能,那么我的问题是我应该如何更改 Python 代码以从 df.write().parquet("myTest.parquet"):

创建的 hadoopish 文件夹中读取 Parquet 文件
load_df = sqlContext.read.parquet("myTest.parquet").where('field1="aaa"').select('field2', 'field3').coalesce(64)

Is it possible to save data frame as a single file?

是的,但您不应该这样做,因为您可能会对单个 JVM 施加太大压力,这不仅会导致性能下降,还会导致 JVM 终止,从而导致整个 Spark 应用程序失败。

所以,是的,这是可能的,您应该 repartition(1) 有一个分区:

repartition(numPartitions: Int): Dataset[T] Returns a new Dataset that has exactly numPartitions partitions.


how should I change the Python code for reading Parquet files from hadoopish folder

从你所谓的 "hadoopish" 文件夹中加载数据集根本不关心内部结构,并将其视为单个文件(即隐藏目录)。

这是文件存储方式的内部表示,不会影响加载它的代码。

Spark 将您的文件写入一个目录,如您所说,这个文件很多,如果写入操作成功,它会保存另一个名为 _SUCCESS

的空文件

我来自 scala,但我相信 python

中也有类似的方法

parquetjson 或您想要的任何格式保存和阅读您的文件很简单:

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

I tried collect(), but it does not help.

谈到 collect,在此类操作中使用它不是一个好习惯,因为它 returns 将您的数据传输给驱动程序,因此您将失去并行计算的好处,并且会导致OutOfMemoryException 如果数据无法放入内存

Is it possible to save data frame as a single file?

在主要情况下您确实不需要这样做,如果是这样,请在保存之前在 Dataframe 上使用 repartition(1) 方法

希望对您有所帮助,此致