Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法从数据帧提取数组/列表,AnalysisException:需要结构类型,但得到二进制_Java_Apache Spark_Dataframe_Apache Spark Sql_Spark Structured Streaming - Fatal编程技术网

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一起工作?或者只是针对自定义数据类型?有关于这些方面的好教程吗?你可以参考和