我有PersonBean,它有City、Bday和MetadataJson成员变量。
我想写按bday和city划分的数据。可以打开/关闭按城市和bday划分。
如果我同时按bday和city划分,一切都会很好。我可以用文本格式编写MetadataJson。
但在城市关闭的情况下,城市在我的PersonBean中是空白的(正如预期的那样(,所以我得到了一个错误-
org.apache.spark.sql.AnalysisException:文本数据源只支持一列,并且有两列。;
当我以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");
我使用了一个"beanDataset.select("bday"、"MetadataJson"(在编写bean之前调用。通过这种方式,我可以将相同的bean用于不同的分区列组合。