我正在尝试将以下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'>
有人可以指出正确的方向吗?
答案 0 :(得分:1)
您传递给abs的字符串,在使用$运算符的scala的情况下有效,该运算符将字符串视为Column。 您需要使用像这样的abs()方法abs(Dataframe.Column_Name) 对于您的情况,请尝试以下一种方法: df1.withColumn(“ abslat”,abs(df1.lat))