dataframe - 删除 pyspark 数据框中的空格

标签 dataframe pyspark

我有一个数据框,其架构如下:

root
 |-- key: string (nullable = true)
 |-- value: array (nullable = true)
 |    |-- element: string (containsNull = true)

我想删除值列中数组的每个元素中的第一个空格(如果存在) 从 pyspark.sql.functions 导入 regexp_replace 我认为它会像下面的代码:

df.select(regexp_replace(col("values"), \s*, *)).show()

df:

+---+------------------------+
|key|                   value|
+---+------------------------+
| k1|       [  x1 x2, x3, x4]|
| k2|      [x5,   x6 x7,  x8]|
| k3|[ x9 x10, x11,  x12 x13]|
+---+------------------------+

预期结果:

+---+------------------------+
|key|                   value|
+---+------------------------+
| k1|         [x1 x2, x3, x4]|
| k2|         [x5, x6 x7, x8]|
| k3|  [x9 x10, x11, x12 x13]|
+---+------------------------+

(数组元素前的所有空格必须去掉) 谢谢

最佳答案

使用 posexplode 更新 first space如果存在。

df.show()
#+---+----------------+
#|key|           value|
#+---+----------------+
#|  1| [a b, b c, c d]|
#|  2|[z x, xu, l z u]|
#+---+----------------+
from pyspark.sql.functions import *

df.selectExpr("key","posexplode(value)").withColumn("col",when(col("pos") ==0,regexp_replace(col('col'),' ','').otherwise(col("col")))).show()
#+---+---------------+
#|key|          value|
#+---+---------------+
#|  1| [ab, b c, c d]|
#|  2|[zx, xu, l z u]|
#+---+---------------+

对于替换开始处的空格,您可以使用

Spark-2.4+:

#+---+-----------------------+
#|key|value                  |
#+---+-----------------------+
#|1  |[   a b i,    b c, c d]|
#|2  |[   z x u, xu, l z u]  |
#+---+-----------------------+
df.selectExpr("transform(value, x -> regexp_replace(x,'^\\\s+','')) as dd").show(10,False)
#+------------------+
#|dd                |
#+------------------+
#|[a b i, b c, c d] |
#|[z x u, xu, l z u]|
#+------------------+

For Spark <2.4:

df.selectExpr("key","explode(value)").withColumn("value",regexp_replace(col("col"),"^\\s+",'')).groupBy(col("key")).agg(collect_list(col("value"))).show()
#+---+-------------------+
#|key|collect_list(value)|
#+---+-------------------+
#|  1|  [a b i, b c, c d]|
#|  2| [z x u, xu, l z u]|
#+---+-------------------+

关于dataframe - 删除 pyspark 数据框中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62601211/

相关文章:

apache-spark - 如何在pyspark中获取ArrayType()另一列中某一列的值的索引?

scala - 在读取 CSV 时,最后一列在 Spark、Scala 中显示为 Null

apache-spark - 设置 PYSPARK_SUBMIT_ARGS 会导致创建 SparkContext 失败

python - 将一列热编码数据添加到数据帧

python - 根据另一列的日期和标志过滤掉行

python - 逗号分隔值文件的列值中的逗号 - python 读取问题

r - 为什么无法访问我的数据框中的列

python - 选择一列来制作直方图

python - 使用 python 在远程机器上列出 HDFS 目录

python - 如何在 pyspark shell 中使用粘贴模式?