我想用Java在Spark中从一个列创建多个列。我已经尝试了多种方法,包括question given in 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))));
我使用了上面的一个变体,但从来没有让它工作。
我想得到这个输出:
+-------------------------------------------+
|col1|col2|col3|col4|col5|col6|col...|col100|
+-------------------------------------------+
|1111|1111|1111|2222|6666|1111|......| 9999 |
|ABC2|XYZ2|GDH2|KLN2|JUL2|HAI2|......| PAHD |
+-------------------------------------------+
在这上面的for循环非常慢,所以不可行。
- 谢谢-谢谢
1条答案
按热度按时间vybvopom1#
对于遇到类似问题的任何人,解决方案是使用IntStream,将每个列Map为一个对象,最后将其转换为列列表。
下面是答案: