我有一个带有int值的数据框,我想分别对每一列求和,然后测试该列的总和是否大于5。如果该列的总和大于5,那么我想将其添加到feature_cols中。我在网上找到的答案仅适用于熊猫,不适用于PySpark。 (我正在使用Databricks)
这是我到目前为止所拥有的:
working_cols = df.columns
for x in range(0, len(working_cols)):
if df.agg(sum(working_cols[x])) > 5:
feature_cols.append(working_cols[x])
此操作的当前输出是feature_cols具有每一列,即使有些总和小于5。
Out[166]:
['Column_1',
'Column_2',
'Column_3',
'Column_4',
'Column_5',
'Column_6',
'Column_7',
'Column_8',
'Column_9',
'Column_10']
答案 0 :(得分:1)
我不是python专家,但是在您的循环中,您正在将DataFrame[sum(a): bigint]
与5进行比较,由于某种原因,答案为True。
df.agg(sum(working_cols[x])).collect()[0][0]
应该给您您想要的东西。实际上,我将数据帧收集到驱动程序,选择第一行(只有一个),然后选择第一列(也只有一个)。
请注意,就性能而言,您的方法并非最佳。您可以只通过一次数据帧计算所有总和,如下所示:
sums = [F.sum(x).alias(str(x)) for x in df.columns]
d = df.select(sums).collect()[0].asDict()
使用此代码,您将获得一个字典,该字典将每个列名与其总和相关联,并且您可以在该字典上应用任何对您而言有意义的逻辑。