【问题标题】:PySpark: How to Split a Column into 3 Columns [duplicate]PySpark:如何将一列拆分为 3 列 [重复]
【发布时间】:2021-11-14 14:48:28
【问题描述】:

我有一个如下所示的 spark 数据框,并希望将列按空格拆分为 3。

+------------+
|        text|
+------------+
|  aaa bb ccc|
+------------+
|  aaa bb c d|
+------------+
|        aa b|
+------------+

以下是预期结果。第一项保留在 text1 列中,第二项进入 text2,其余的都进入 text3(如果有)。原始列值可能有空记录或带有任意数量分隔符的值,即空格“”。

+------------+-----+-----+-----+
|        text|text1|text2|text3|
+------------+-----+-----+-----+
|  aaa bb ccc| aaa | bb  | ccc |
+------------+-----+-----+-----+
|  aaa bb c d| aaa | bb  | c d |
+------------+-----+-----+-----+
|        aa b| aa  | b   | null|
+------------+-----+-----+-----+
|        aa  | aa  |null | null|
+------------+-----+-----+-----+
|            | null|null | null|
+------------+-----+-----+-----+

提前致谢!

【问题讨论】:

  • 谢谢。建议传递限制参数的解决方案应该有效。它与以下答案建议的相同。但是,当我通过第三个参数来指示限制时,我收到错误说 split 只能接受 2 个参数。

标签: python pyspark apache-spark-sql


【解决方案1】:

您可以使用split 函数。

arr_cols = [F.split('text', ' ', 3)[i].alias('text' + str(i+1)) for i in range(3)]
df = df.select('text', *arr_cols)
df.show(truncate=False)

【讨论】:

  • 谢谢。这应该有效。但是,我抱怨 split 只能接受 2 个参数,但我正在通过第 3 个参数,即极限参数“3”。这是因为 Pyspark 版本吗? arr_cols = [F.split('text', ' ', 3)[i].alias('text' + str(i+1)) for i in range(3)] TypeError: split() 需要 2 个位置参数但是给了 3 个
  • 是的,在 3.0 版中已更改:拆分现在采用可选的限制字段。如果未提供,则默认限制值为 -1。
  • 刚刚检查了我的 spark 版本是 2.3.0.2.6.5.65-2。有没有办法在拆分函数中传递限制参数或使用其他函数来实现相同的目标?
  • 以我有限的2.3版本经验,恐怕没有现成的功能可以使用,需要通过UDF实现。
猜你喜欢
  • 2016-11-14
  • 2014-07-25
  • 2016-11-20
  • 2019-08-29
  • 2018-01-29
  • 2018-01-24
  • 2011-09-21
  • 2016-05-08
  • 2016-11-17
相关资源
最近更新 更多