【问题标题】:PySpark: how to handle "else" in if chain in dataframe?PySpark:如何在数据框中的 if 链中处理“else”?
【发布时间】:2020-02-26 22:29:38
【问题描述】:

我有 PySpark 代码,因此可以在数据帧中分类条件(这是创建最小工作示例的简化):

return df.select(
    ((df.x[0] == 0) & (df.x[1] == 0)).alias("HR_%s" % label),
    (((df.x[0] == 0) & (df.x[1] > 0)) |
    ((df.x[1] == 0) & (df.x[0] > 0))).alias("HET_%s" % label),

我了解这段代码的作用,但我需要添加一些内容来捕获异常,例如,当 df.x 只有 1 个元素并且 df.x[1] 未定义(例如)时,所有条件会失败,但我该如何在 PySpark 中做到这一点?

【问题讨论】:

标签: apache-spark pyspark


【解决方案1】:

如果您想要一个没有真正“错误”(即异常)处理的“其他”条件,请查看pyspark.sql.Column.otherwise

如果您想尝试“错误”(即异常)处理,则需要将 try ... catch 逻辑包装为 user-defined function

【讨论】:

  • 谢谢!我发现写 .otherwise(sys.exit('exception message here')) 之类的东西非常有用
  • @con 我建议提出错误而不是使用sys.exit,因为sys.exit 将覆盖pyspark 中的许多内置安全机制。另外,请确保将其包装为 lambda/UDF,否则该行将在 Python-interpretation-time 而不是 Spark-execution-time 执行。
猜你喜欢
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 2017-06-25
  • 2016-12-26
  • 2020-02-13
  • 2021-10-12
  • 2017-12-08
  • 1970-01-01
相关资源
最近更新 更多