gpt4 book ai didi

apache-spark - 处理pyspark数据帧中的字符串到数组转换

转载 作者:行者123 更新时间:2023-12-02 08:04:33 25 4
gpt4 key购买 nike

我有一个文件(csv),当在 Spark 数据帧中读取时,它具有以下打印模式的值

-- list_values: string (nullable = true)

list_values 列中的值类似于:
[[[167, 109, 80, ...]]]

是否可以将其转换为数组类型而不是字符串?

我尝试拆分它并使用在线提供的代码解决类似问题:
df_1 = df.select('list_values', split(col("list_values"), ",\s*").alias("list_values"))

但是如果我运行上面的代码,我得到的数组会跳过原始数组中的很多值,即

上面代码的输出是:
[, 109, 80, 69, 5...

这与原始数组不同,即(-- 167 丢失)
[[[167, 109, 80, ...]]] 

由于我是 spark 新手,因此我不太了解它是如何完成的(对于 python,我本可以完成 ast.literal_eval 但 spark 对此没有规定。

所以我再重复一遍这个问题:

如何将存储为字符串的数组转换/转换为 array IE。
'[]' to [] conversion

最佳答案

假设您的 DataFrame 如下:

df.show()
#+----+------------------+
#|col1| col2|
#+----+------------------+
#| a|[[[167, 109, 80]]]|
#+----+------------------+

df.printSchema()
#root
# |-- col1: string (nullable = true)
# |-- col2: string (nullable = true)

您可以使用 pyspark.sql.functions.regexp_replace 删除前导和尾随方括号。完成后,您可以 split ", " 上的结果字符串:

from pyspark.sql.functions import split, regexp_replace

df2 = df.withColumn(
"col3",
split(regexp_replace("col2", r"(^\[\[\[)|(\]\]\]$)", ""), ", ")
)
df2.show()

#+----+------------------+--------------+
#|col1| col2| col3|
#+----+------------------+--------------+
#| a|[[[167, 109, 80]]]|[167, 109, 80]|
#+----+------------------+--------------+

df2.printSchema()
#root
# |-- col1: string (nullable = true)
# |-- col2: string (nullable = true)
# |-- col3: array (nullable = true)
# | |-- element: string (containsNull = true)

如果您希望该列作为整数数组,则可以使用强制转换:

from pyspark.sql.functions import col
df2 = df2.withColumn("col3", col("col3").cast("array<int>"))
df2.printSchema()
#root
# |-- col1: string (nullable = true)
# |-- col2: string (nullable = true)
# |-- col3: array (nullable = true)
# | |-- element: integer (containsNull = true)

关于apache-spark - 处理pyspark数据帧中的字符串到数组转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52994340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com