Spark的DataFrame中用explode将array数组转换成多行

//service_prod_code字段类型为array
val df_info = spark.sql(
    """
      select
        product, service_prod_code
      from
        tablename
    """.stripMargin)

//使用explode会将原值中的null值删除掉,就是说,如果原来的array值为空的话,通过explode转换后,会直接删除掉这行数据,只保留array指不为空的数据
val service_result = df_info.withColumn("service_explode", explode(col("service_prod_code")))



//想要保留array值为空的数据的话,可采用如下方法

//spark 2.2+
val service_result = df_info.withColumn("service_explode", explode_outer(col("service_prod_code")))

//spark <=2.1
df.withColumn("service_explode", explode(
  when(col("service_prod_code").isNotNull, col("service_prod_code"))
    // If null explode an array<string> with a single null
    .otherwise(array(lit(null).cast("string")))))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值