Python 火花减速器在几个不同的值上
我有一个存储为列表RDD的表,我希望在该表上执行类似于SQL或pandas中的groupby的操作,获取每个变量的总和或平均值 我目前的做法是(未经测试的代码): 然后我需要加入dict中的所有RDDPython 火花减速器在几个不同的值上,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我有一个存储为列表RDD的表,我希望在该表上执行类似于SQL或pandas中的groupby的操作,获取每个变量的总和或平均值 我目前的做法是(未经测试的代码): 然后我需要加入dict中的所有RDD 但这不是很有效。有更好的方法吗?如果使用>=Spark 1.3,可以查看 在pyspark外壳中: import numpy as np # create a DataFrame (this can also be from an RDD) df = sqlCtx.createDataFrame(
但这不是很有效。有更好的方法吗?如果使用>=Spark 1.3,可以查看 在pyspark外壳中:
import numpy as np
# create a DataFrame (this can also be from an RDD)
df = sqlCtx.createDataFrame(map(lambda x:map(float, x), np.random.rand(50, 3)))
df.agg({col: "mean" for col in df.columns}).collect()
这将产生:
[Row(AVG(_3#1456)=0.5547187588389414, AVG(_1#1454)=0.5149476209374797, AVG(_2#1455)=0.5022967093047612)]
可用的聚合方法有“平均值”/“平均值”、“最大值”、“最小值”、“总和”、“计数”
要为同一列获取多个聚合,可以使用显式构造的聚合列表而不是字典调用agg
:
from pyspark.sql import functions as F
df.agg(*[F.min(col) for col in df.columns] + [F.avg(col) for col in df.columns]).collect()
或者对于您的情况:
df.agg(F.count(df.var3), F.max(df.var3), ) # etc...
你能告诉我对于特定变量使用特定聚合方法的语法吗。目前,下面只给出了我对每个变量使用的最后一个方法:aggreg=df1.filter(df1.var3>25)。join(df2,df1.Machine==df2.Machine)。groupBy(df1.Machine)。agg({“var3”:“count”,“var3”:“max”,“var4”:“mean”,“var4”:“max”,“var5”:“mean”,“var6”:“mean”})谢谢。使用这种新语法,groupby变量(本例中为Machine)消失了。我怎么能保留它?
df.agg(F.count(df.var3), F.max(df.var3), ) # etc...