如何RDD使用分布式方法,IPython和Spark 找到整数的中位数?的RDD是约700 000元,因此过大,以收集和发现中位数.
这个问题与这个问题类似.但是,问题的答案是使用Scala,我不知道.
使用Scala答案的思考,我试图在Python中编写类似的答案.
我知道我首先要排序RDD.我不知道怎么.我看到sortBy(按给定的方式对此RDD进行排序keyfunc)和sortByKey(对此进行排序RDD,假设它由(键,值)对组成.)方法.我认为两者都使用键值,而我RDD只有整数元素.
myrdd.sortBy(lambda x: x)?rdd.count())的长度.编辑:
我有个主意.也许我可以索引我的RDD然后key = index和value = element.然后我可以尝试按价值排序?我不知道这是否可行,因为只有一种sortByKey方法.
我有这些列数据框id,price,timestamp.
我想找到按中值分组的中位数值id.
我正在使用此代码来查找它,但它给了我这个错误.
from pyspark.sql import DataFrameStatFunctions as statFunc
windowSpec = Window.partitionBy("id")
median = statFunc.approxQuantile("price",
[0.5],
0) \
.over(windowSpec)
return df.withColumn("Median", median)
Run Code Online (Sandbox Code Playgroud)
是否无法DataFrameStatFunctions用于填充新列中的值?
TypeError: unbound method approxQuantile() must be called with DataFrameStatFunctions instance as first argument (got str instance instead)
Run Code Online (Sandbox Code Playgroud) Spark具有SQL函数percentile_approx(),与Scala对应的是SQL df.stat.approxQuantile()。
但是,Scala副本不能用于分组数据集,例如df.groupby("foo").stat.approxQuantile(),在此处回答:https : //stackoverflow.com/a/51933027。
但是可以在SQL语法中进行分组和百分位。所以我想知道,是否可以从SQL percentile_approx函数定义UDF 并将其用于分组数据集?