如何解决如何使用Spark / JAVA将WrappedArray转换为String
我有以下数据框:
+--------------------+
| column |
+--------------------+
| [99896,10,] |
|[50,30,40,] |
+--------------------+
该列的Shema是:
|-- column: array (nullable = true)
|-- element: string (containsNull = true)
当我执行以下代码时:
for (Iterator<Row> iter = dataframee.toLocalIterator(); iter.hasNext();){
String item = (iter.next()).get(0).toString();
System.out.println(item);
}
我得到以下输出:
WrappedArray(99896,)
WrappedArray(50,)
如何将该输出转换为String:
[99896,50,40 ]
我需要你的帮助。
谢谢
解决方法
因此,基本上,您正在做的是遍历每一行,获取该行的WrappedArray
,并使用WrappedArray
的{{1}}方法。您无需调用toString()
而是要遍历该toString()
并打印其中的每个值
试试这个-
加载提供的测试数据
Dataset<Row> df = spark.sql("select column from values array(99896,10,null),array(50,30,40,null) T(column)");
df.show(false);
df.printSchema();
/**
* +-------------+
* |column |
* +-------------+
* |[99896,] |
* |[50,]|
* +-------------+
*
* root
* |-- column: array (nullable = false)
* | |-- element: integer (containsNull = true)
*/
选项1
StringBuilder sb = new StringBuilder();
sb.append("[");
for (java.util.Iterator<Row> iter = df.toLocalIterator(); iter.hasNext();){
String item = (iter.next()).getList(0).stream()
.filter(Objects::nonNull)
.map(String::valueOf)
.collect(Collectors.joining(","));
sb.append(item).append(",");
}
int i = sb.lastIndexOf(",");
sb.replace(i,i+1,"]");
System.out.println(sb);
/**
* [99896,50,40]
*/
选项2
Dataset<Row> p = df.withColumn("column",expr("concat('[',concat_ws(',',collect_list(concat_ws(',column))),']')"));
for (java.util.Iterator<Row> iter = p.toLocalIterator(); iter.hasNext();){
String item = (iter.next()).get(0).toString();
System.out.println(item);
}
/**
* [99896,40]
*/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。