Spark -在写入分区之前从bean中删除列

ehxuflar  于 2022-11-16  发布在  Apache
关注(0)|答案(1)|浏览(141)

我有一个PersonBean,它有City、Bday和一个MetadataJson成员变量。
我想写分区数据的bday和城市。分区城市和bday可以切换。
如果我同时按bday和city进行分区,一切都很好。我可以用文本格式编写MetadataJson。
但是,在假设City被切换为OFF的情况下,City在我的PersonBean中为空(正如预期的那样),所以我得到一个错误-
org.apache.spark.sql.AnalysisException:文本数据源只支持单列,而您有2列。
当我以CSV格式写入时,同一个数据集写入了一个空白的第二列。有没有办法删除以“文本”格式写入的列?
我不想以我期望的格式为所有分区组合创建3个单独的bean。

1Bean- bday and MetadataJson
2Bean- City and MetadataJson
3Bean- bday and City and MetadataJson



JavaRDD<PersonBean> rowsrdd = jsc.parallelize(dataList);
        SparkSession spark = new SparkSession(
                JavaSparkContext.toSparkContext(jsc));
        Dataset<Row> beanDataset = spark.createDataset(data.rdd(), Encoders.bean(PersonBean.class));;
        String[] partitionColumns = new String[]{"City"}

    beanDataset.write()
            .partitionBy(partitionColumns)
            .mode(SaveMode.Append)
            .option("escape", "")
            .option("quote", "")
            .format("text")
            .save("outputpath");
von4xj4u

von4xj4u1#

在编写bean之前,我使用了“beanDataset.select(“bday”,“MetadataJson”)调用。这样,我就可以对不同的分区列组合使用相同的bean。

相关问题