【问题标题】:Spark Save DataSet partitionby File Already Exists ErrorSpark Save DataSet partitionby File Already Exists 错误
【发布时间】: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


【解决方案1】:

试试

rowDataset.repartition("keep", "idHash").write().partitionBy("keep", "idHash").save("test.parquet");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多