【发布时间】:2020-06-29 22:37:59
【问题描述】:
所以我试图确定周日发生在旧金山市中心边界内的犯罪活动。我的想法是首先编写一个 UDF 来标记每个犯罪是否在我确定为市区的区域内,如果它发生在该区域内,那么它将具有“1”和“0”的标签,否则。之后,我试图创建一个新列来存储这些结果。我尽力写了我能写的所有东西,但由于某种原因它不起作用。这是我写的代码:
from pyspark.sql.types import BooleanType
from pyspark.sql.functions import udf
def filter_dt(x,y):
if (((x < -122.4213) & (x > -122.4313)) & ((y > 37.7540) & (y < 37.7740))):
return '1'
else:
return '0'
schema = StructType([StructField("isDT", BooleanType(), False)])
filter_dt_boolean = udf(lambda row: filter_dt(row[0], row[1]), schema)
#First, pick out the crime cases that happens on Sunday BooleanType()
q3_sunday = spark.sql("SELECT * FROM sf_crime WHERE DayOfWeek='Sunday'")
#Then, we add a new column for us to filter out(identify) if the crime is in DT
q3_final = q3_result.withColumn("isDT", filter_dt(q3_sunday.select('X'),q3_sunday.select('Y')))
我得到的错误是:Picture for the error message
我的猜测是我现在拥有的 udf 不支持将整个列作为要比较的输入,但我不知道如何修复它以使其工作。请帮忙!谢谢!
【问题讨论】:
标签: sql pyspark user-defined-functions