gpt4 book ai didi

python - 遍历 pyspark 数据框列

转载 作者:太空宇宙 更新时间:2023-11-03 15:57:43 33 4
gpt4 key购买 nike

我有以下 pyspark.dataframe:

age  state  name    income
21 DC john 30-50K
NaN VA gerry 20-30K

我正在尝试实现相当于 df.isnull().sum()(来自 pandas)的效果:

age      1
state 0
name 0
income 0

起初我尝试了一些类似的方法:

null_counter = [df[c].isNotNull().count() for c in df.columns]

但这会产生以下错误:

TypeError: Column is not iterable

同样,这就是我目前迭代列以获得最小值的方式:

class BaseAnalyzer:
def __init__(self, report, struct):
self.report = report
self._struct = struct
self.name = struct.name
self.data_type = struct.dataType
self.min = None
self.max = None

def __repr__(self):
return '<Column: %s>' % self.name


class BaseReport:
def __init__(self, df):
self.df = df
self.columns_list = df.columns
self.columns = {f.name: BaseAnalyzer(self, f) for f in df.schema.fields}

def calculate_stats(self):
find_min = self.df.select([fn.min(self.df[c]).alias(c) for c in self.df.columns]).collect()
min_row = find_min[0]
for column, min_value in min_row.asDict().items():
self[column].min = min_value

def __getitem__(self, name):
return self.columns[name]

def __repr__(self):
return '<Report>'

report = BaseReport(df)
calc = report.calculate_stats()

for column in report1.columns.values():
if hasattr(column, 'min'):
print("{}:{}".format(column, column.min))

这允许我“遍历列”

<Column: age>:1
<Column: name>: Alan
<Column: state>:ALASKA
<Column: income>:0-1k

我认为这种方法已经变得很复杂,我如何才能正确地遍历所有列以提供 vaiour 汇总统计信息(最小值、最大值、isnull、notnull 等)。pyspark.sql.Row 之间的区别pyspark.sql.Column 来自 Pandas 似乎很奇怪。

最佳答案

你有没有试过这样的事情:

names = df.schema.names
for name in names:
print(name + ': ' + df.where(df[name].isNull()).count())

您可以看到如何修改它以将信息放入字典或其他更有用的格式中。

关于python - 遍历 pyspark 数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42307976/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com