我目前正在学习pyspark,并且正在使用多种条件向pyspark数据框添加列。
我尝试使用UDF,但遇到一些错误,例如:
TypeError: 'object' object has no attribute '__getitem__'
from pyspark.sql.functions import udf, struct
from pyspark.sql.types import IntegerType, StringType, FloatType
from pyspark.sql.functions import pandas_udf, PandasUDFType
#first dataframe (superset)
df1 = simple_example1
#second dataframe
df = diff_cols.dropna()
def func(x,y):
z = df1[(df1['a'] == x) & (df1['b'] <= (y+10000000000)) & (df1['b'] >= (y-10000000000))]
z = z[(z["c"] ==1) | (z["d"] ==1)]
z = z[(z["e"]!=0) | (z["f"]!=0) | (z["g"]!=0) | (z["h"]!=0)]
return 1 if z.count() > 3 else 0
udf_func = udf(func, IntegerType())
df = df.withColumn('status', udf_func(df['a'],df['b']))
我正在尝试的方法如下: 1.对于df1的每行df过滤器数据,其中参数a等于df中的参数,参数b应该在b-10到b + 10之间 2.然后使用c或d = 1进一步过滤该数据 3.如果来自e f g h的任何参数都不为0,则进一步过滤该数据 4.然后计算子集中的行数并分配0/1 5.在df的状态栏中返回此0/1