gpt4 book ai didi

java - Apache Spark Row 将多个字符串字段转换为单个行,并使用字符串数组转换异常

转载 作者:行者123 更新时间:2023-11-30 02:15:59 25 4
gpt4 key购买 nike

我尝试实现这样的代码:

    StructType dataStruct = new StructType()
.add("items", DataTypes.createArrayType(DataTypes.StringType, false), false);
ExpressionEncoder<Row> encoder = RowEncoder.apply(dataStruct);

Dataset<Row> arrayItems = transactions.map((MapFunction<Row, Row>) row -> {
List<String> items = new LinkedList<>();
for (int i = 1; i <= 12; i++) {
if (row.getString(i) != null)
items.add(row.getString(i));
}
System.out.println(items);
return RowFactory.create(items.toArray());
}, encoder);

使用这种模式转换数据集:

|user<String>|item1<String>|item2<String>|item3<String>|...|item12<String>|

具有此类架构的数据集:

|item<String[]>|

但我遇到以下异常:java.lang.RuntimeException:java.lang.String不是数组架构的有效外部类型

我不明白为什么 RowFactory 采用 String 作为参数,而不是 String[]?有人可以帮助我吗,在这种情况下我应该做什么?

数据示例:

user|item1|item2|item3|item4|item5|item6|item7|item8|item9|item10|item11|item12
Bob|01W|01J|01W|01J|01W|01J|01W|01J|01W|01J|null|null
John|03T|018T|003H|A44I|03T|null|003H|A44I|03T|018T|003H|null
Bill|CMZI|UDAG|01W|null|null|01J|018T|003H|A44I|018T|003H|A44I

最佳答案

发生这种情况是因为 Java 中的可变参数只是语法糖

Object ... values

相当于

Object[] values

所以

return RowFactory.create(items.toArray());

将扩展数组。您需要一个嵌套结构:

Object[] rowItems =  {items.toArray()};
RowFactory.create(rowItems));

进一步阅读Can I pass an array as arguments to a method with variable arguments in Java?

关于java - Apache Spark Row 将多个字符串字段转换为单个行,并使用字符串数组转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48440869/

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