火花行编码器:空元数据

问题描述 投票:2回答:1

我在Java中使用spark,并且从RDD OF行创建Row的数据集。

我使用以下方式创建模式

Metadata meta = new MetadataBuilder().putString("type", "categorical").build();
StructField s = new StructField(name, IntegerType, true, meta);
StructType t = new StructType(new StructField[]{s});  
Encoder<Row> encoder = RowEncoder.apply(t);

而且我在这样的数据集中使用它

ds.flatMap((FlatMapFunction<Row, Row>) this::customFlatMapRow, encoder);

出于某些原因,在我写完表并检查了模式的字段及其元数据后,它们为空(尽管我创建并设置它们的方式如上所述)。我不知何故失去了它们

apache-spark apache-spark-sql
1个回答
0
投票

如果检查数据集的ExpressionEncoder,则元数据可用。

代码

Metadata meta = new MetadataBuilder().putString("type", "categorical").build();
StructField s = new StructField("col", IntegerType, true, meta);
StructType t = new StructType(new StructField[]{s});
Encoder<Row> encoder = RowEncoder.apply(t);

Dataset<Row> df = spark.createDataset(Arrays.asList(1, 2, 3), Encoders.INT()).toDF("col");
Dataset<Row> df2 = df.flatMap((FlatMapFunction<Row, Row>) r -> Collections.singleton(r).iterator(), encoder);
System.out.println(df2.exprEnc().schema().fields()[0].metadata());

打印

{"type":"categorical"}
© www.soinside.com 2019 - 2024. All rights reserved.