我试图将Spark DataFrame(超过20G)保存到Amazon S3中的单个json文件,我保存数据帧的代码是这样的:
dataframe.repartition(1).save("s3n://mybucket/testfile","json")
但是我从S3获得错误"您建议的上传超过了允许的最大大小",我知道亚马逊允许的最大文件大小为5GB。
是否可以在Spark上使用S3分段上传?还是有另一种方法来解决这个问题?
顺便说一下,我需要将数据放在一个文件中,因为其他用户将在之后下载它。
*我在使用spark-ec2脚本创建的3节点集群中使用apache spark 1.3.1。
非常感谢
JG
答案 0 :(得分:28)
我会尝试将大型数据帧分成一系列较小的数据帧,然后将这些数据帧附加到目标中的同一文件中。
df.write.mode('append').json(yourtargetpath)
答案 1 :(得分:5)
试试这个
dataframe.write.format("org.apache.spark.sql.json").mode(SaveMode.Append).save("hdfs://localhost:9000/sampletext.txt");
答案 2 :(得分:-4)
s3a不是Spark中的生产版本我认为。 我会说设计不健全。重新分区(1)将会很糟糕(你所说的火花是将所有分区合并为一个分区)。 我建议说服下游从文件夹而不是单个文件下载内容