我在学习Sparkr。我有一个csv文件:
a <- read.df(sqlContext,"./mine/a2014.csv","csv")我想使用write.df来存储这个文件。但是,当我使用:
write.df(a,"mine/a.csv")我得到一个名为a.csv的文件夹,其中根本没有csv文件。
发布于 2016-05-24 15:01:20
将数据划分为块,这样就可以将这些分区分布在集群中的节点上。在写入数据时,它保留此分区:它创建一个目录并将每个分区写入一个单独的文件。这样,它可以更好地利用分布式文件系统(将每个块与HDFS/S3并行编写),并且不必将所有数据收集到一台可能无法处理数据量的单一机器上。
长名称的两个文件是数据的两个分区,并保存实际的CSV数据。您可以通过复制它们、用.csv扩展重命名副本并双击它们或使用类似于head longfilename的内容来看到这一点。
您可以通过尝试将其读入:为Spark提供目录的路径,并通过您提到的元数据和_SUCCESS文件将其识别为分区文件,从而测试写入是否成功。
如果确实需要一个文件中的所有数据,可以使用repartition将分区数量减少到1,然后编写:
b <- repartition(a, 1)
write.df(b,"mine/b.csv")这只会导致一个长名文件,它是一个包含所有数据的CSV文件。
(我不使用未经测试的SparkR;在Scala/PySpark中,您更愿意使用coalesce而不是repartition,但我找不到一个等价的SparkR函数)
https://stackoverflow.com/questions/37393648
复制相似问题