Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Spark Java编码器-collectAsList上的开关字段_Java_Apache Spark_Apache Spark Sql - Fatal编程技术网

Spark Java编码器-collectAsList上的开关字段

Spark Java编码器-collectAsList上的开关字段,java,apache-spark,apache-spark-sql,Java,Apache Spark,Apache Spark Sql,我在数据集中有以下模式- root |-- userId: string (nullable = true) |-- data: map (nullable = true) | |-- key: string | |-- value: struct (valueContainsNull = true) | | |-- startTime: long (nullable = true) | | |-- endTime: long (nullable

我在数据集中有以下模式-

root
 |-- userId: string (nullable = true)
 |-- data: map (nullable = true)
 |    |-- key: string
 |    |-- value: struct (valueContainsNull = true)
 |    |    |-- startTime: long (nullable = true)
 |    |    |-- endTime: long (nullable = true)
 |-- offset: long (nullable = true)
我有以下类(+为了简单起见,我省略了setter和getter)-

输出-

|data[2017-07-01].startTime|data[2017-07-01].endTime|
+------------------------------------+--------------+
|1498854000                |1498870800              |
这是收集以下各项的REUSELT后的结果-

MyClass userData = results.collectAsList().get(0); MyDTO userDTO = userData.getData().get("2017-07-01"); System.out.println("userDTO startTime: " + userDTO.getStartTime()); System.out.println("userDTO endTime: " + userDTO.getEndTime());
--


有线索吗?这是一个火花问题吗?如何绕过它?

您可以添加带有列索引的setter和getter来解决此错误


我也看到过类似的问题。有什么解决方法或已知的bug吗?我想问题出在从“spark”到“java”的某个地方。我找到的解决方法是df.toJSON(),然后使用jackson对象映射器转换到所需的类。这是一个主要问题,特别是当数据成员来自不同类型时,请参见我的错误-
results.select(results.col("data").getField("2017-07-01").getField("startTime")).show(false);
|data[2017-07-01].startTime|data[2017-07-01].endTime|
+------------------------------------+--------------+
|1498854000                |1498870800              |
MyClass userData = results.collectAsList().get(0); MyDTO userDTO = userData.getData().get("2017-07-01"); System.out.println("userDTO startTime: " + userDTO.getStartTime()); System.out.println("userDTO endTime: " + userDTO.getEndTime());
data startTime: 1498870800
data endTime: 1498854000
public static class MyDTO {
    private long startTime;
    private long endTime;

    public long get1StartTime() {
        return startTime;
    }

    public void set1StartTime(long startTime) {
        this.startTime = startTime;
    }

    public long get2EndTime() {
        return startTime;
    }

    public void set2EndTime(long endTime) {
        this.endTime = endTime;
    }
}