我是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(),上述错误已得到解决。现在,我的实际要求是将以下pandas数据框代码重写为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)
任何人都可以帮助我如何实现上述要求。预先感谢。
答案 0 :(得分:1)
要从DataFrame中获取列列表,请使用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))
更多细节,请优先使用approxQuantile