Java 无法从数据帧提取数组/列表,AnalysisException:需要结构类型,但得到二进制
我有一个字符串为[]的数据集,我正在努力从中提取列。这是密码Java 无法从数据帧提取数组/列表,AnalysisException:需要结构类型,但得到二进制,java,apache-spark,dataframe,apache-spark-sql,spark-structured-streaming,Java,Apache Spark,Dataframe,Apache Spark Sql,Spark Structured Streaming,我有一个字符串为[]的数据集,我正在努力从中提取列。这是密码 import static org.apache.spark.sql.functions.col; //Read parquet data Dataset<Row> readerDF = spark.readStream().format("parquet"). List<String> columns = Arrays.asList("city","country"); //Interested in o
import static org.apache.spark.sql.functions.col;
//Read parquet data
Dataset<Row> readerDF = spark.readStream().format("parquet").
List<String> columns = Arrays.asList("city","country");
//Interested in only field in data for now 'fieldMap' which is Map<String,String>
Dataset<String[]> stringArrDF = readerDF.map((MapFunction<Row, String[]>) row -> {
Map<String,String> fields = row.getJavaMap(row.fieldIndex("fieldMap"));
List<String> columnList = new ArrayList<>();
columns.forEach(columnName ->
{
columnList.add(fields.getOrDefault(columnName, ""));
});
return columnList.toArray(new String[columns.size]);
}, Encoders.kryo(String[].class));
//I was expecting to extract city here:
Dataset ds = stringArrDF.select(col("value").getItem(1).as("city"));
但它失败了,只有以下例外
线程主org.apache.spark.sql.AnalysisException中的异常:
无法从value22中提取值
如何从数据集中访问字符串[]或列表字段?下面是错误信息 线程主org.apache.spark.sql.AnalysisException中的异常: 无法从value22中提取值:需要结构类型,但得到二进制 您正在使用Encoders.kryoString[].class创建stringArrDF。如果您查看Encoders.kryo的文档,它会说 创建一个编码器,该编码器使用Kryo序列化T类型的对象。这 编码器将T映射到单字节数组二进制字段中
使用spark.implicits.newstringarayencoder对字符串[]进行编码。我如何才能让它与Kryo一起工作?或者只是针对自定义数据类型?有关于这些方面的好教程吗?你可以参考和