根据其他pyspark数据框的条件将列添加到pyspark数据框

时间:2019-03-23 15:56:32

标签: pyspark user-defined-functions

我目前正在学习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

0 个答案:

没有答案