Python PySpark:在多列中计算值的最快方法
我需要在几列中计算一个值,并且我希望列表中的每一列都有这些单独的计数 有没有更快/更好的方法?因为我的解决方案需要相当长的时间Python PySpark:在多列中计算值的最快方法,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我需要在几列中计算一个值,并且我希望列表中的每一列都有这些单独的计数 有没有更快/更好的方法?因为我的解决方案需要相当长的时间 dataframe.cache() list = [dataframe.filter(col(str(i)) == "value").count() for i in range(150)] 您可以执行条件计数聚合: import pyspark.sql.functions as F df2 = df.agg(*[ F.count(F.w
dataframe.cache()
list = [dataframe.filter(col(str(i)) == "value").count() for i in range(150)]
您可以执行条件计数聚合:
import pyspark.sql.functions as F
df2 = df.agg(*[
F.count(F.when(F.col(str(i)) == "value", 1)).alias(i)
for i in range(150)
])
result = df2.toPandas().transpose()[0].tolist()
您可以尝试以下方法/设计
VALUE='VALUE'
def行映射器(df行):
返回[each==df_行中的每个值]
def reduce_行(df_行1,df_行2):
返回[x+y代表x,y在zip中(df_row1,df_row2)]
注意:这些是简单的python函数,可以帮助您理解一些不能直接应用于PySpark的udf函数。您希望您的解决方案比我的更快吗?这甚至不是spark解决方案,所以我不认为soI甚至不理解第二个。@Dusty-是的,两种方法都不同!如果数据是以柱状方式存储和执行的,那么您的方法应该更快,如果数据是拼花地板或任何柱状格式或柱状数据存储,那么这是可能的。否则,我的方法更快,每一行只读取一次,而且非常简单。一个map和一个reduce操作。如果可能的话,请分享你的观点和统计数据。你希望你的解决方案比我的更快吗?我想应该是这样。请随时在您的数据上进行测试。谢谢。我试试看。