gpt4 book ai didi

python - 带逗号的 PySpark 值不包含逗号? (尝试转换为 ArrayType(StringType()))

转载 作者:行者123 更新时间:2023-12-01 09:04:40 26 4
gpt4 key购买 nike

我正在运行 PySpark v1.6.0,并且有一列字符串值(根据 .printSchema),但是当我尝试根据列值以“[”字符开头或包含的情况过滤行时一个“,”字符,在这两种情况下,都表示我期望评估为 True 的行仍然是 False...

当我运行代码时:

col_name = "attempt_params_attempt_response_id"
resultDF.select(col_name, resultDF[col_name].like(",")).show(50)

我得到:

Picture where column value should be true but is false

我不明白这是怎么可能的,因为字符串值显然包含逗号,因此该行应该返回 true,而不是 false

类似地,当我尝试将行转换为 ArrayType(StringType()) (这是我的最终目标)时,它的行为也就像我的行不包含逗号一样...

当我运行代码时:

from pyspark.sql.types import ArrayType, IntegerType, StringType

col_name = "attempt_params_attempt_response_id"
resultDF.withColumn(col_name,
split(resultDF[col_name], ",\s*")
.cast(ArrayType(StringType()))).select(col_name).show(40)

我得到结果:

Multidimensional array as if there was no comma to split on

我想知道是否可能存在某种奇怪的编码问题,导致字符 , 与数据中看似 , 字符的字符不匹配。 ..但我真的不确定。关于为什么会发生这种情况以及如何在不创建多维数组文本的情况下实际使转换工作的任何想法?

最佳答案

如果您的模式错误。 like 相当于使用简单正则表达式的 SQL like,因此 , 仅匹配文字 ,

df = spark.createDataFrame([("[0,2,3]", ), (",", )], ("text", ))
df.withColumn("contains_comma", col("text").like(",")).show()
+-------+--------------+
| text|contains_comma|
+-------+--------------+
|[0,2,3]| false|
| ,| true|
+-------+--------------+

要获得匹配,您应该添加前导和尾随通配符:

df.withColumn("contains_comma", col("text").like("%,%")).show()


# +-------+--------------+
# | text|contains_comma|
# +-------+--------------+
# |[0,2,3]| true|
# | ,| true|
# +-------+--------------+

第二种情况完全没有问题。由于您在 上拆分, 第一项将包含一个前导 [

df.withColumn("contains_comma", split("text", ",\s*")[0]).show()
+-------+--------------+
| text|contains_comma|
+-------+--------------+
|[0,2,3]| [0|
| ,| |
+-------+--------------+

和最后一个尾随]。如果您不希望它们出现在输出中,则应该将其删除,例如使用 regexp_replace :

split(regexp_replace("text", "^\[|\]$",  ""), ",")

关于python - 带逗号的 PySpark 值不包含逗号? (尝试转换为 ArrayType(StringType())),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52157239/

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