pyspark.sql.functions abs()失败,并带有PySpark列输入

时间:2018-12-05 23:48:13

标签: 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'>

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

1 个答案:

答案 0 :(得分:1)

您传递给abs的字符串,在使用$运算符的scala的情况下有效,该运算符将字符串视为Column。 您需要使用像这样的abs()方法abs(Dataframe.Column_Name) 对于您的情况,请尝试以下一种方法: df1.withColumn(“ abslat”,abs(df1.lat))