【问题标题】:Convert comma separated string to array in pyspark dataframe将逗号分隔的字符串转换为pyspark数据框中的数组
【发布时间】:2016-11-06 10:39:17
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    你可以使用内置的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")
    )
    

    【讨论】:

    • 感谢您提供的信息,经过一番研究,我刚刚发现了拆分功能并即将发布答案:)。
    • 还有一个帮助,我搜索了这个,但找不到。结果数组是一个字符串数组,我们可以将它作为整数数组吗?
    • 是的,你可以在之后转换类型。
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2011-06-12
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多