【发布时间】:2017-01-19 17:25:47
【问题描述】:
我有一个按以下方式构造的数据集:
Encoder<MyDomain> encoder= Encoders.bean(MyDomain.class);
Dataset<MyDomain> stdDS = sc.createDataset(filteredRecords.rdd(), encoder);
Dataset<Row> rowDataset = stdDS.withColumn("idHash", stdDS.col("id").substr(0, 5));
然后我尝试通过以下方式输出数据集:
rowDataset.write().partitionBy("keep", "idHash").save("test.parquet");
当我只通过“keep”进行分区时,一切正常,然后我通过“keep”和“idHash”进行分区,我得到:
File already exists: file:/C:/dev/test.parquet/_temporary/0/_temporary/attempt_201701191219_0001_m_000000_0/keep=true/idHash=0a/part-r-00000-2c2e0494-f6a7-47d7-88e2-f49dffb608d1.snappy.parquet
如何让我的 DataSet 使用多个分区正确输出。文件夹一开始是空的。当我在本地机器上运行时也会发生此错误,在生产中此数据将输出到 S3,因此任何解决方案都需要同时针对本地文件系统和 AWS S3。
谢谢, 内森
【问题讨论】:
-
你尝试把这个
write().mode("append")或write().mode("overwrite")放上去吗? -
我尝试了追加,但发生了同样的错误,我认为不需要任何一个选项,因为没有输出数据开始。
-
您找到解决方案了吗?
标签: apache-spark amazon-s3 parquet apache-spark-dataset