我有一个如下所示的数据框,其中 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/