我是 pyspark 的新手。我在如下所示的数组中有列列表。
input_vars = [
'column1',
'column2',
'column3',
'column4'
]
现在我想使用数据帧做如下的事情。
for var in input_vars:
print(df.var.isNotNull())
但是当我尝试执行上面的代码时,我得到以下错误
AttributeError: 'DataFrame' object has no attribute 'var'
编辑
我已经根据"ernest_k"给出的建议尝试了 df[var].isNotNull((,并且上述错误得到了解决。现在我的实际要求是将下面的熊猫数据帧代码重写为 pyspark 数据帧。
for var in input_vars:
bindt = df2[df2[var].notnull()][var].quantile([0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1]).unique()
q0 = df2[df2[var].notnull()][var].quantile(0)
q1 = df2[df2[var].notnull()][var].quantile(0.25)
q2 = df2[df2[var].notnull()][var].quantile(0.5)
q3 = df2[df2[var].notnull()][var].quantile(0.75)
q4 = df2[df2[var].notnull()][var].quantile(1)
任何人都可以帮助我如何实现上述要求。提前谢谢。
若要从数据帧获取列列表,请使用 df.columns
,然后从那里处理下一步。
在Spark 2.0+中,您可以使用(我不能100%保证approxQuantile(var, [0.5], 0.25)
满足您的要求,请更改它(
columns = df.columns
for var in input_vars:
if var in columns:
print(df.filter('{} is not null'.format(var)).approxQuantile(var, [0.5], 0.25))
else:
print('Column {} not found'.format(var))
更多细节,请首选近似分位数