如果我用Java以这种方式保存数据帧,.:
df.write().parquet("myTest.parquet");.然后就会以一种草率的方式保存它(一个包含大量文件的文件夹)。
是否可以将数据帧保存为单个文件?我试过collect(),但没有用。
如果这是不可能的,那么我的问题是如何更改Python代码,以便从df.write().parquet("myTest.parquet")创建的hadoopish文件夹中读取Parquet文件
load_df = sqlContext.read.parquet("myTest.parquet").where('field1="aaa"').select('field2', 'field3').coalesce(64)发布于 2017-05-21 11:11:57
星星之火将您的文件写入一个目录中,如您所说,此文件包含大量文件,如果写入操作成功,它将保存另一个名为_SUCCESS的空文件。
我是从scala来的,但我相信python也有类似的方式
以parquet或json或任何您想要的格式保存和读取您的文件非常简单:
df.write.parquet("path")
loaddf = spark.read.parquet("path")我试着收集(),但没有用。
谈到collect,在这样的操作中使用它不是一个好的做法,因为它会将数据返回给驱动程序,因此您将失去并行计算的好处,如果数据不能放入内存中,则会导致OutOfMemoryException。
是否可以将数据帧保存为单个文件?
在大多数情况下,您确实不需要这样做,如果需要,在保存repartition(1)之前在Dataframe上使用它
希望能帮上忙,向你问好
发布于 2017-05-21 11:04:54
是否可以将数据帧保存为单个文件?
是的,但是您不应该对单个JVM施加太多的压力,这不仅会导致性能下降,而且还会导致JVM终止,从而导致整个Spark应用程序失败。
因此,是的,这是可能的,您应该使用repartition(1)来拥有一个分区:
重新分区( numPartitions : Int):DatasetT返回一个完全有numPartitions分区的新数据集。
如何更改Python代码以从hadoopish文件夹读取Parquet文件
从dataset (您称之为"hadoopish“文件夹)加载数据集,与内部结构完全无关,并将其视为单个文件(即封面下的目录)。
这是一个文件存储方式的内部表示,不影响加载它的代码。
https://stackoverflow.com/questions/44096013
复制相似问题