PySpark:如何在数据框中的 if 链中处理“else”?

Posted

技术标签:

【中文标题】PySpark:如何在数据框中的 if 链中处理“else”?【英文标题】:PySpark: how to handle "else" in if chain in dataframe? 【发布时间】: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 中做到这一点?

【问题讨论】:

这是您需要的“***.com/questions/42349830/…”吗? @RemisHaroon 这与我想要的很接近,但不准确,谢谢 【参考方案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 执行。

以上是关于PySpark:如何在数据框中的 if 链中处理“else”?的主要内容,如果未能解决你的问题,请参考以下文章

从 PySpark 中的数据框中删除重复项

PYSPARK:如何在 pyspark 数据框中找到两列的余弦相似度?

如何从 PySpark 中的数据框中获取模式定义?

pySpark:如何在数据框中的 arrayType 列中获取 structType 中的所有元素名称?

如何将数据框中的连接值插入到 Pyspark 中的另一个数据框中?

如何更改pyspark数据框中列的顺序?