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

时间:2016-07-04 16:31:36

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

我有一个如下数据框,其中ev是string类型。

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

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

1 个答案:

答案 0 :(得分:15)

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