首页 > 解决方案 > pyspark.sql.functions abs() 因 PySpark 列输入而失败

问题描述

我正在尝试将以下 HiveQL 查询转换为 PySpark:

SELECT *
FROM ex_db.ex_tbl
WHERE dt >= 20180901 AND 
      dt < 20181001 AND
      (ABS(HOUR(FROM_UNIXTIME(local_timestamp))-13)>6 OR
      (DATEDIFF(FROM_UNIXTIME(local_timestamp), '2018-12-31') % 7 IN (0,6))

我不擅长 PySpark,但我查看了函数列表。我已经到了尝试 ABS() 函数的地步,但在 PySpark 中却很难做到这一点。这是我尝试过的:

import pyspark.sql.functions as F
df1.withColumn("abslat", F.abs("lat"))
An error occurred while calling z:org.apache.spark.sql.functions.abs

它不起作用。我读到输入必须是 PySpark 列。我查了一下,这个条件满足了。

type(df1.lat)
<class 'pyspark.sql.column.Column'>

有人可以指出我正确的方向吗?

标签: pyspark

解决方案


您将字符串传递给 abs 在使用 $ 运算符的 scala 将字符串视为列的情况下有效。你需要使用 abs() 这样的方法 abs(Dataframe.Column_Name) 对于你的情况,试试这个: df1.withColumn("abslat", abs(df1.lat))


推荐阅读