如何在pyspark数据框中访问动态列

时间:2019-02-11 12:00:28

标签: pandas python-2.7 apache-spark pyspark pyspark-sql

我是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)

任何人都可以帮助我如何实现上述要求。预先感谢。

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