gpt4 book ai didi

java - Spark Java 编码器 - 在 collectAsList 上切换字段

转载 作者:行者123 更新时间:2023-11-30 10:27:48 25 4
gpt4 key购买 nike

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

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,为简单起见我省略了)-

public class MyClass {

private String userId;

private Map<String, MyDTO> data;

private Long offset;
}

public class MyDTO {

private long startTime;
private long endTime;

}

我通过以下方式收集结果 -

    Encoder<MyClass> myClassEncoder = Encoders.bean(MyClass.class);
Dataset<MyClass> results = raw_df.as(myClassEncoder);
List<MyClass> lst = results.collectAsList();

我做了几次计算来得到我想要的结果,结果在我收集之前一直都是正确的。这是 -

的结果
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

有什么线索吗?这是 Spark 问题吗?我怎样才能绕过它?

最佳答案

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

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;
}
}

关于java - Spark Java 编码器 - 在 collectAsList 上切换字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45082861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com