gpt4 book ai didi

apache-spark - 拆分后转换数组的元素

转载 作者:行者123 更新时间:2023-12-04 11:02:44 25 4
gpt4 key购买 nike

我有一个带有 1 个数组列的 spark DF col1

+--------------------------+
|COL1 |
| |
+---------------------------
|[101:10001:A, 102:10002:B]|
|[201:20001:B, 202:20002:A]|

对于数组中的所有元素,我正在 split :并且想要选择第一部分(例如 101),如果拆分的最后一部分是 A,否则选择 None。

预期输出:
+--------------------------+
|COL2 |
| |
+---------------------------
|[101, None] |
|[None, 202] |

代码:
expr = """
transform(COL1,
e -> when(split(e,':')[2] == 'A', split(e, ':')[0]).otherwise(None)
)
"""
df = df.withColumn("COL2", expr(expr))

我得到了 ParseException
\nextraneous input '(' expecting {')', ','}(line 3, pos 70)\n\n== SQL ==\n\n         transform(COL1,\n         e -> when(split(e,':')[2] == 'A', split(e, ':')[0]).otherwise(None)\n----------------------------------------------------------------------^^^\n         )\n        \n"
Traceback (most recent call last):
File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/functions.py", line 675, in expr
return Column(sc._jvm.functions.expr(str))
File "/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
answer, self.gateway_client, self.target_id, self.name)
File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 73, in deco
raise ParseException(s.split(': ', 1)[1], stackTrace)

最佳答案

expr()函数,你需要使用SQL语法,并且你必须重命名变量expr覆盖 API 函数 expr并使其成为字符串。 (如果您不想要文字字符串 NULL ,请在 SQL 中使用 None ):

from pyspark.sql.functions import expr

expr1 = """
transform(COL1,
e -> IF(split(e,':')[2] = 'A', split(e,':')[0], "None")
)
"""

df.withColumn("COL2", expr(expr1)).show()

关于apache-spark - 拆分后转换数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58692671/

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