apache-spark - 使用 pyspark 中的 groupBy 函数使用 QuantileDiscretizer 进行分桶
问题描述
我有一个像这样的大型数据集:
| SEQ_ID|RESULT|
+-------+------+
|3462099|239.52|
|3462099|239.66|
|3462099|239.63|
|3462099|239.64|
|3462099|239.57|
|3462099|239.58|
|3462099|239.53|
|3462099|239.66|
|3462099|239.63|
|3462099|239.52|
|3462099|239.58|
|3462099|239.52|
|3462099|239.64|
|3462099|239.71|
|3462099|239.64|
|3462099|239.65|
|3462099|239.54|
|3462099| 239.6|
|3462099|239.56|
|3462099|239.67|
该RESULT
列按SEQ_ID
列分组。RESULT
我想根据每组的计数来分桶/分箱。应用一些聚合后,我有一个数据框,其中包含每个SEQ_ID
必须分箱的桶数。像这样:
| SEQ_ID|num_buckets|
+-------+----------+
|3760290| 12|
|3462099| 5|
|3462099| 5|
|3760290| 13|
|3462099| 13|
|3760288| 10|
|3760288| 5|
|3461201| 6|
|3760288| 13|
|3718665| 18|
例如,这告诉我RESULT
属于 3760290 的值SEQ_ID
必须分箱到 12 个桶中。
对于单个组,我会重视并执行以下操作collect()
:num_buckets
discretizer = QuantileDiscretizer(numBuckets=num_buckets, inputCol='RESULT', outputCol='buckets')
df_binned=discretizer.fit(df).transform(df)
我知道在使用时QuantileDiscretizer
,每个组都会产生一个单独的数据框,然后我可以将它们全部合并。但是如何在不使用循环QuantileDiscretizer
的情况下对各个组进行分类?for
解决方案
推荐阅读
- amazon-s3 - S3 对象未更新
- php - 匹配表中的mysql通配符条目以进行查询
- angular - 激活路由可选参数 observable 发出每个字符而不是整个字符串
- javascript - 如何创建类似于`context.Provider`/`context.Consumer`的结构来在机器人应用程序中传递值?
- python - 如何验证包含“时间”的字符串应该是这样的:99:99:99.99?
- mysql - 错误“对于此服务器版本,SELECT 在此位置的输入无效,在 MySQL Workbench 中应为:'(' WITH"
- php - 试图获取非对象 Laravel 的属性用户
- ios - 在单元格的 ContentView 之外添加视图
- java - 如何在 SimpleDateFormat 中分别从 MM/dd/yyyy kk:mm 获取 MM/dd/yyyy kk:mm
- ios - 如何从 Delphi 10.3 Rio 中的 iOS API 函数获取 CFStringRef 值