[Scala] Spark将RDD中某一列下的数组拆分成多列

23 篇文章 0 订阅
val data: RDD[String]
val data2 = data.map(x => {
      val y = x.split("\\|\\|", -1)
      y
    })
val data3 = data2.toDF()
data3.show(10)

+--------------------+
|               value|
+--------------------+
|[66,................]|
|[81,................]|
|[82,................]|
|[62,................]|
|[83,................]|

准备将value这一列下数组中的元素拆开成列并显示
新的列按col_{1,2…}命名

import org.apache.spark.sql.functions.col

    data3.select(
       col("value") +:
      (0 until COLUMNS_NAME.length).map(i => {
        col("value")(i).alias(s"col_$i")
      }): _*
    ).show()

参考资料:
原文链接
https://www.it1352.com/1933758.html
原文内容如下

问题描述
我有一个Spark数据框,看起来像:

id DataArray
a array(3,2,1)
b array(4,2,1)
c array(8,6,1)
d array(8,2,4)
我想将此数据帧转换为:

id col1 col2 col3
a 3 2 1
b 4 2 1
c 8 6 1
d 8 2 4
我应该使用什么功能?

推荐答案
使用apply:

import org.apache.spark.sql.col

df.select(
col(“id”) +: (0 until 3).map(i => col(“DataArray”)(i).alias(s"col$i")): _*
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值