我有Spark
spark_df = spark.createDataFrame(
[(1, 7, 'foo'),
(2, 6, 'bar'),
(3, 4, 'foo'),
(4, 8, 'bar'),
(5, 1, 'bar')
],
['v1', 'v2', 'id']
)
预期产量
id avg(v1) avg(v2) min(v1) min(v2) 0.25(v1) 0.25(v2) 0.5(v1) 0.5(v2)
0 bar 3.666667 5.0 2 1 some-value some-value some-value some-value
1 foo 2.000000 5.5 1 4. some-value some-value some-value some-value
到目前为止,我可以得到基本的统计数据,比如平均值,最小值,最大值,但是不能得到分位数。我知道,这在Pandas身上很容易实现,但在Pypark身上却做不到
另外,我知道近似分位数,但是我不能在pyspark中把基本状态和分位数结合起来
到目前为止,我可以通过使用agg获得基本的统计数据,比如mean和min。我还想要同一个df中的分位数
func = [F.mean, F.min,]
NUMERICAL_FEATURE_LIST = ['v1', 'v2']
GROUP_BY_FIELDS = ['id']
exp = [f(F.col(c)) for f in func for c in NUMERICAL_FEATURE_LIST]
df_fin = spark_df.groupby(*GROUP_BY_FIELDS).agg(*exp)
3条答案
按热度按时间kgqe7b3p1#
也许这是有帮助的-
如果您需要在格式,然后使用下面的答案。
ztigrdn82#
方法DESCRIPE计算Dataframe中数字列的统计信息,如平均值、最小值、最大值等。
df.descripe().show()
blmhpbnm3#
我认为这样的语法就是你想要的:
它有助于创建别名,因为未格式化的列名很难处理。