python - 删除pyspark列表中的单引号

标签 python apache-spark pyspark

我有一个像这样的数据框。 colA 包含项目列表,但它存储在像这样的引号下

data = [(("ID1", "['valA', 'valB']")), (("ID1", "[]")), (("ID1", "['valC']")), (("ID1", ""))]
df = spark.createDataFrame(data, ["ID", "colA"])
df.show()

+---+----------------+
| ID|            colA|
+---+----------------+
|ID1|['valA', 'valB']|
|ID2|              []|
|ID3|        ['valC']|
|ID4|                |
+---+----------------+

colA 具有空白和空列表值。

我想清理此列,以便我拥有以下 DataFrame

+---+------------+
| ID|        colA|
+---+------------+
|ID1|[valA, valB]|
|ID2|        null|
|ID3|      [valC]|
|ID4|        null|
+---+------------+

最佳答案

步骤:

  1. 删除开始 ^['| 结束 ']$ 括号。 \ 用于转义,^ 用于字符串开头,$ 用于字符串结尾
  2. 将空列表 [] 转换为空字符串,再次使用 \ 转义
  3. 删除空字符串
  4. 通过'、'','分割来分隔元素,?表示可选空格

代码

from pyspark.sql import functions as f

data = [(("ID1", "['valA', 'valB']")), (("ID1", "[]")), (("ID1", "['valC']")), (("ID1", ""))]
df = spark.createDataFrame(data, ["ID", "colA"])

df_2 \
  .withColumn('colA_2', f.regexp_replace('colA', "^\['|'\]$", '')) \
  .withColumn('colA_2', f.regexp_replace('colA_2', "\[\]", '')) \
  .withColumn('colA_2', f.when(f.col('colA_2') == "", None).otherwise(f.col('colA_2'))) \
  .withColumn('colA_2', f.split('colA_2', "', ?'"))

输出

df_2.show()

+---+----------------+------------+
| ID|            colA|      colA_2|
+---+----------------+------------+
|ID1|['valA', 'valB']|[valA, valB]|
|ID1|              []|        null|
|ID1|        ['valC']|      [valC]|
|ID1|                |        null|
+---+----------------+------------+
df_2.printSchema()

root
 |-- ID: string (nullable = true)
 |-- colA: string (nullable = true)
 |-- colA_2: array (nullable = true)
 |    |-- element: string (containsNull = true)

关于python - 删除pyspark列表中的单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57603538/

相关文章:

python - 在 Python 中,如何将字符串与字典项匹配(如 'Bra*' )

python - 如何创建一个新的私有(private)文本 channel 并向其中添加 2 个人?

python - 从 numpy 数组中删除连续的数字

scala - 使用一对 (K,Collection[V]) 时 Spark : RDD. saveAsTextFile

apache-spark - 列数据到Spark结构化流中的嵌套json对象

pyspark - AWS Glue PySpark 替换 NULL

python - 获取可用模块

java - 将 Spring 与 Spark 一起使用

python - 从 PySpark 中 Groupby 之后的另一列的值获取最小值和最大值

scala - 如何从 pyspark 设置 hadoop 配置值