[英]PySpark value with comma doesn't contain comma?? (Trying to cast to ArrayType(StringType()))
我正在運行 PySpark v1.6.0,並且我有一列字符串值(根據 .printSchema),但是當我嘗試根據列值以“[”字符開頭或包含“, " 字符,在這兩種情況下,都是說我期望評估為 True 的行仍然是 False ...
當我運行代碼時:
col_name = "attempt_params_attempt_response_id"
resultDF.select(col_name, resultDF[col_name].like(",")).show(50)
我得到:
我不明白這是怎么可能的,因為字符串值顯然包含一個逗號,所以該行應該返回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)
我得到結果:
我想知道是否有某種奇怪的編碼問題導致字符,
與數據中似乎是,
字符的字符不匹配......但我真的不確定。 關於為什么會發生這種情況以及如何在不創建多維數組文本的情況下實際使演員表工作的任何想法?
如果你的模式是錯誤的。 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
它們,例如使用regexp_replace
:
split(regexp_replace("text", "^\[|\]$", ""), ",")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.