【问题标题】:Pyspark - Avoid using explodePyspark - 避免使用爆炸
【发布时间】:2021-09-19 08:38:41
【问题描述】:

我想在不使用“explode”或“UDF”的情况下检查数组列的值是否等于“A”,因为它使我的 DataFrame 非常大并且过程非常缓慢。

所以我有这个

+-----+----+--------------------+---------+
| Name| Age|            Subjects|   Grades|
+-----+----+--------------------+---------+
|[Bob]|[16]|[Maths, Physics, ...|[A, B, C]|
+-----+----+--------------------+---------+

我想要这个

+-----+----+--------------------+---------+--------------------+
| Name| Age|            Subjects|   Grades|         test       |
+-----+----+--------------------+---------+--------------------+
|[Bob]|[16]|[Maths, Physics, ...|[A, B, C]|[true, false, false]|
+-----+----+--------------------+---------+--------------------+

任何解决方案?

提前致谢。

【问题讨论】:

    标签: python apache-spark pyspark user-defined-functions explode


    【解决方案1】:

    您可以为此使用 SQL TRANSFORM

    import pyspark.sql.functions as F
    
    df = df.withColumn("test", F.expr("TRANSFORM(Grades, x -> x = 'A')"))
    

    【讨论】:

    • 感谢您的回答,您认为当您拥有大约 200 列(带有 和数组字段)和数百万行时,这是最快的解决方案?
    • 不知道这个是不是最快,但是从内存使用的角度来说,我觉得比使用explode和再次分组要好
    • 谢谢你的回答,是的,在输出中爆炸 ctrate 十亿行。所以你我会试试这个或UDF最后的选择
    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2020-12-10
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多