繁体   English   中英

使用 Java 在 Spark 中将单列拆分为多列

[英]Split a single column into multiple columns in Spark using Java

我想使用 Java 从 Spark 中的单个列创建多个列。我尝试了多种方法,包括scala 中给出的这个问题的答案,但我似乎无法使其在 Java 中工作。

例如,我的这个列有一个很长的序列(大约 100):

+---------------------------------+
|                data             |
+---------------------------------+
|1111:1111:1111:2222:6666:1111....|
|ABC2:XYZ2:GDH2:KLN2:JUL2:HAI2....|
+---------------------------------+

我尝试使用IntStream.range(0,16)来复制 Java 中的答案,但它不起作用。

我试过的一个不起作用的例子是: df.withColumn("temp", IntStream.range(0,100).map(i->split(col("temp"),":").getItem(i).as(col("col"+i)))); 我使用了上述的变体,但从未让它起作用。

我想得到这个 output:

+-------------------------------------------+
|col1|col2|col3|col4|col5|col6|col...|col100|
+-------------------------------------------+
|1111|1111|1111|2222|6666|1111|......| 9999 |
|ABC2|XYZ2|GDH2|KLN2|JUL2|HAI2|......| PAHD |
+-------------------------------------------+

对此的 for 循环非常慢,因此不可行。

谢谢你。

对于遇到类似问题的任何人,解决方案是使用 IntStream,map 每列作为 object 最后将其转换为列列表。

这是答案:

import scala.collection.JavaConverters;
import java.util.List;
import org.apache.spark.sql.Column;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

List<Column> c = IntStream.range(0, 100).mapToObj(i->col("data").getItem(i).as("col"+i)).sequential().collect(Collectors.toList());
df.select(JavaConverters.asScalaIteratorConverter(c.iterator()).asScala().toSeq());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM