我有一个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");
1条答案
按热度按时间von4xj4u1#
在编写bean之前,我使用了“beanDataset.select(“bday”,“MetadataJson”)调用。这样,我就可以对不同的分区列组合使用相同的bean。