我有一张桌子,比如
+---------------+------+
|id | value|
+---------------+------+
| 1|118.0|
| 2|109.0|
| 3|113.0|
| 4| 82.0|
| 5| 60.0|
| 6|111.0|
| 7|107.0|
| 8| 84.0|
| 9| 91.0|
| 10|118.0|
+---------------+------+
as 希望将值聚合或将值条柱到 0,10,20,30,40 的范围内,...80,90,100,110,120
如何在SQL或更具体的spark sql中执行此操作?
目前我有一个侧视图,但这看起来相当笨拙/低效。
分位数离散化并不是我真正想要的,而是这个范围的CUT
。
https://github.com/collectivemedia/spark-ext/blob/master/sparkext-mllib/src/main/scala/org/apache/spark/ml/feature/Binning.scala 将执行动态条柱,但我宁愿需要这个指定的范围。
尝试使用此“分组依据”
SELECT id, (value DIV 10)*10 FROM table_name ;
以下将使用Scala的数据集API:
df.select(('value divide 10).cast("int")*10)
一般情况下,可以使用org . Apache . spark . ml . feature . bucket izer执行静态宁滨:
val df = Seq(
(1, 118.0), (2, 109.0), (3, 113.0), (4, 82.0), (5, 60.0),
(6, 111.0), (7, 107.0), (8, 84.0), (9, 91.0), (10, 118.0)
).toDF("id", "value")
val splits = (0 to 12).map(_ * 10.0).toArray
import org.apache.spark.ml.feature.Bucketizer
val bucketizer = new Bucketizer()
.setInputCol("value")
.setOutputCol("bucket")
.setSplits(splits)
val bucketed = bucketizer.transform(df)
val solution = bucketed.groupBy($"bucket").agg(count($"id") as "count")
结果:
scala> solution.show
+------+-----+
|bucket|count|
+------+-----+
| 8.0| 2|
| 11.0| 4|
| 10.0| 2|
| 6.0| 1|
| 9.0| 1|
+------+-----+
当值位于定义的箱之外时,桶化器会抛出错误。可以将分割点定义为Double.NegativeInfinity
或Double.PositiveInfinity
来捕获异常值。
<code>Bucketizer</code>设计用于通过执行右bucket的二进制搜索来有效地处理任意拆分。对于像您这样的普通垃圾箱,您可以简单地执行以下操作:
val binned = df.withColumn("bucket", (($"value" - bin_min) / bin_width) cast "int")
其中< code>bin_min和< code>bin_width分别是最小bin的左区间和bin宽度。
问题内容: 我从elasticsearch开始,并且一直试图进行一些聚合。基本上,我有一个数据集,包含以下形式的数据: 现在,我想进行一些汇总,并在一个查询中获得所有的Continental餐馆,Good餐馆,New York餐馆。 请注意,我不希望统计所有类型的餐厅,而只希望统计特定类型的餐厅。而且,这些聚合是相互独立的。就是说,当我说“好”时,我并不一定要它是“大陆”,它可以是意大利语或其他任
问题内容: ES版本:1.5(Amazon Elasticsearch) 我的目标:在某个字段上具有重复数据删除功能的搜索结果。我目前正在对聚合进行一些研究,以解决重复数据删除问题。因此,我的结果是一个带有1个大小的存储桶的列表存储桶。但是,我找不到订购存储桶列表的方法。 当前查询: 结果: 我想看到第二个存储桶,其中max_score = 68.78424为第一个。这可能吗? 如果不建议使用聚合
此处为elasticsearch新用户,但存在术语聚合问题。我为187份文档编制了索引,其中包含“名称”、“主机”、“风险”等字段。字段风险有4个唯一值(“关键”、“高”、“中”、“低”、“信息”),我正在运行这样的术语聚合: 我希望得到一个结果,说明我有x个临界值,x个高值等等。问题是,我没有得到返回的桶。 我的Elasticsearch版本是7.12.0有什么想法吗 > 编辑:这是映射: 以下
问题内容: 我需要计算管道聚合返回的结果集中的存储桶数。问题是我的查询在这里使用脚本选择器: 返回类似这样的内容: 在该键下,我可以看到一个满足我条件的访问者列表(由标识的每个访问者都必须在索引中恰好有三个文档),但这不是很有用,因为它可以处理成千上万的访问者。我正在使用PHP处理结果,从理论上讲,它可以计算结果集,但是对于大量的访问者来说,这并不是最好的主意。有没有一种方法可以仅在和旁边输出有效
亚马逊是否提供了一种简单的方法来查看我的S3存储桶或文件夹使用了多少存储空间?这是为了我可以计算我的成本等。
问题内容: 我有很多不同提供商的IP范围。例如 我将此IP转换为int32: 我的任务: 通过用户IP地址查找提供者名称(例如192.168.2.20(3232236052)) 在MySQL中很简单: Redis怎么做? 问题答案: 这取决于您是否认为您的IP范围可以重叠。如果不是,则解决方案非常简单: 使用哈希的集合来存储提供者数据 使用zset索引范围的最大值 检索最大值大于IP的(唯一)范围