[英]Replicate a function from pandas into pyspark
我正在尝试在火花 dataframe 而不是 pandas 上执行相同的 function。
def check_value(df):
lista=[]
for index,value in enumerate(df.columns):
lista.append('Column name: db_transactions/{} has {} % of white_space charachter and {} nullvalues'.format(df.columns[index],sum(list(map(lambda x: str(x).isspace(),df[value])))/df.shape[0],pd.isna(df[value]).sum()))
return lista
直接翻译需要您为每列计算进行多次collect
。 我建议您将 dataframe 中的列作为单行进行所有计算,然后收集该行。 这是一个例子。
# input dataframe, say `data_sdf`
# the blank values can have none or multiple whitespaces - ' ', '', ' ', etc.
# +--------+--------+
# | chars1| chars2|
# +--------+--------+
# | | |
# | | |
# | blah | blah |
# | blah| blah|
# | blah | blah |
# | blah| blah|
# | null| |
# +--------+--------+
计算所有列的空白值百分比和 null 值的数量。
calc_sdf = data_sdf. \
select(*[(func.sum(func.trim(func.col(colname)).like('').cast('int')) / func.count('*')).alias(colname+'_wspace') for colname in data_sdf.columns],
*[func.sum(func.col(colname).isNull().cast('int')).alias(colname+'_null') for colname in data_sdf.columns]
)
# +------------------+-------------------+-----------+-----------+
# | chars1_wspace| chars2_wspace|chars1_null|chars2_null|
# +------------------+-------------------+-----------+-----------+
# |0.2857142857142857|0.42857142857142855| 1| 0|
# +------------------+-------------------+-----------+-----------+
我们可以将计算字段转换为字典,以便在创建lista
时使用。
calc_dict = calc_sdf.rdd. \
map(lambda k: k.asDict()). \
collect()[0]
# {'chars1_null': 1,
# 'chars1_wspace': 0.2857142857142857,
# 'chars2_null': 0,
# 'chars2_wspace': 0.42857142857142855}
在lista
创建中使用calc_dict
。
lista = []
for colname in data_sdf.columns:
lista.append('Column name: db_transactions/{} has {} % of white_space character and {} nullvalues'.format(colname,
round(data_dict[colname+'_wspace'] * 100, 2),
data_dict[colname+'_null']
)
)
# ['Column name: db_transactions/chars1 has 28.57 % of white_space character and 1 nullvalues',
# 'Column name: db_transactions/chars2 has 42.86 % of white_space character and 0 nullvalues']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.