这个问题在这里已有答案:
我将所有字符串字段存储在列表对象中 . 然后,我正在传递for循环内的每个字段来计算聚合计数 .
我正在寻找一种方法来获取所有字符串列的聚合计数 . 请帮忙 .
样本数据:
Dataframe(Input_Data)具有这些记录
NoOfSegments,SegmentID,Country
3,2,Bangalore
3,2,Bangalore
3,3,Delhi
3,2,Delhi
3,3,Delhi
3,1,Pune
3,3,Bangalore
3,1,Pune
3,1,Delhi
3,3,Bangalore
3,1,Delhi
3,3,Bangalore
3,3,Pune
3,2,Delhi
3,3,Pune
3,2,Pune
3,2,Pune
3,3,Pune
3,1,Bangalore
3,1,Bangalore
我的代码:
input_data.createOrReplaceTempView('input_data')
sub="string"
category_columns = [name for name, data_type in input_data.dtypes
if sub in data_type]
df_final_schema = StructType([StructField("Country", StringType())
, StructField("SegmentID", IntegerType())
, StructField("total_cnt", IntegerType())
])
df_final=spark.createDataFrame([],df_final_schema)
for cat_col in category_columns:
query="SELECT {d_name} as Country,SegmentID ,(count(*) over(partition by {d_name},SegmentID)/ count(*) over(partition by NoOfSegments))*100 as total_cnt from input_temp order by {d_name},SegmentID".format(d_name=cat_col)
new_df=hc.sql(query)
df_final = df_final.union(new_df)
结果:
有什么方法可以传递所有字符串列并一次计算数据帧的上述结果吗?
1 回答
您可以使用
groupBy
(或groupby
)尝试以下操作: