concat_ws(sep, *cols)和concat(*cols) pyspark.sql.functions使用详解

pyspark.sql.functions两中字符串拼接函数的用法和差异

concat_ws(sep, *cols)

使用给定的分隔符sep 将多个输入字符串列连接到一个字符串列中。

>>> df = sqlContext.createDataFrame([('abcd','123')], ['s', 'd'])
>>> df.select(concat_ws('-', df.s, df.d).alias('s')).collect()
[Row(s=u'abcd-123')]

concat(*cols)

将多个输入字符串列连接成一个字符串列。

>>> df = sqlContext.createDataFrame([('abcd','123')], ['s', 'd'])
>>> df.select(concat(df.s, df.d).alias('s')).collect()
[Row(s=u'abcd123')]

两者差异

当使用concat(*cols)拼接,当某个字段为NULL,会拼接生成空行,导致数据缺失

>>> df = spark.createDataFrame([([1, 2], [3, 4], [5]), ([1, 2], None, [3])], ['a', 'b', 'c'])
    >>> df.select(concat(df.a, df.b, df.c).alias("arr")).collect()
    [Row(arr=[1, 2, 3, 4, 5]), Row(arr=None)]
import pyspark.sql.functions as F
d = df.withColumn("sep", F.lit("|$|"))
data = d.select(F.concat(d.a, d.Sep, d.b, d.Sep, d.c).alias('s'))

同时也可以作为一种过滤方式,将字段为NULL的数据过滤掉
如果需要保留字段为NULL的数据,使用concat_ws(sep, *cols)

data_ws = d.select(F.concat_ws('|$|', d.a, d.b, d.c).alias('s'))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值