python - 将逗号分隔的字符串转换为 pyspark 数据框中的数组

标签 python apache-spark dataframe pyspark apache-spark-sql

我有一个如下所示的数据框,其中 ev 是字符串类型。

>>> df2.show()
+---+--------------+
| id|            ev|
+---+--------------+
|  1| 200, 201, 202|
|  1|23, 24, 34, 45|
|  1|          null|
|  2|            32|
|  2|          null|
+---+--------------+

有没有办法在不使用 UDF 的情况下将 ev 转换为类型 ArrayType,或者 UDF 是唯一的选择?

最佳答案

您可以使用内置的split 函数:

from pyspark.sql.functions import col, split

df = sc.parallelize([
    (1, "200, 201, 202"), (1, "23, 24, 34, 45"), (1, None),
    (2, "32"), (2, None)]).toDF(["id", "ev"])

df.select(col("id"), split(col("ev"), ",\s*").alias("ev"))

如果你想将数据转换为数字类型,你可以按如下方式转换:

df.withColumn(
    "ev",
    split(col("ev"), ",\s*").cast("array<int>").alias("ev")
)

from pyspark.sql.types import ArrayType, IntegerType

df.withColumn(
    "ev",
    split(col("ev"), ",\s*").cast(ArrayType(IntegerType())).alias("ev")
)

关于python - 将逗号分隔的字符串转换为 pyspark 数据框中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38189088/

相关文章:

python - Networkx 解析 gml 写入不可用的 gml 文件

python - pyinstaller [错误号 22]

apache-spark - 主类中的Spark-submit master url和SparkSession master url有什么区别?

java - Spark 强制 log4j

Python Pandas : Boolean indexing on multiple columns

python - 如何将绝对值合并到 Pandas 数据框中?

python - 如何在kivy中自定义 slider

python - 如何使用 nuitka 共享对象文件?

apache-spark - 为什么我的 pyspark 在启动时在 yarn 中以 ACCEPTED 状态挂起?

html - 在 R 中的 DT::datatable 中包含表容器