当前位置: 首页 > 知识库问答 >
问题:

滤波器中的Spark Scala位运算

华景焕
2023-03-14

我有一个由col1和col2列聚合的源数据集。Col2值通过按位或运算进行聚合。我需要对Col2值应用过滤器,以选择位为8,4,2的记录

初始源原始数据

val SourceRawData = Seq(("Flag1", 2),
      ("Flag1", 4),("Flag1", 8), ("Flag2", 8), ("Flag2", 16),("Flag2", 32)
      ,("Flag3", 2),("Flag4", 32),
      ("Flag5", 2), ("Flag5", 8)).toDF("col1", "col2")
SourceRawData.show()
+-----+----+
| col1|col2|
+-----+----+
|Flag1|   2|
|Flag1|   4|
|Flag1|   8|
|Flag2|   8|
|Flag2|  16|
|Flag2|  32|
|Flag3|   2|
|Flag4|  32|
|Flag5|   2|
|Flag5|   8|
+-----+----+

将Col1值折叠为每Col1值一行后,基于“上面的SourceRawData”聚合源数据,这是其他团队和Col2值通过按位或运算聚合的结果。注意我这里提供的是输出,而不是实际的聚合逻辑

val AggregatedSourceData = Seq(("Flag1", 14L),
      ("Flag2", 56L),("Flag3", 2L), ("Flag4", 32L), ("Flag5", 10L)).toDF("col1", "col2")

AggregatedSourceData.show()

+-----+----+
| col1|col2|
+-----+----+
|Flag1|  14|
|Flag2|  56|
|Flag3|   2|
|Flag4|  32|
|Flag5|  10|
+-----+----+

现在,我需要对上面的聚合数据集应用过滤器,以根据原始源原始数据值获取col2值满足(8,4,2)col2位的行

expected output
+-----+----+
|Col1 |Col2|
+-----+----+
|Flag1|14  |
|Flag2|56  |
|Flag3|2   |
|Flag5|10  |
+-----+----+

我尝试了下面这样的html" target="_blank">方法,似乎得到了预期的输出,但无法理解它是如何工作的。这是正确的方法吗??如果是的话,它是如何工作的(我不太懂位运算,所以请寻求专家帮助了解)`

``
var myfilter:Long  = 2 | 4| 8
AggregatedSourceData.filter($"col2".bitwiseAND(myfilter) =!= 0).show()  
 
+-----+----+
| col1|col2|
+-----+----+
|Flag1|  14|
|Flag2|  56|
|Flag3|   2|
|Flag5|  10|
+-----+----+

共有1个答案

翁建弼
2023-03-14

我认为你不需要使用bitWiseAnd来过滤,相反,只需使用包含/in“你想要的比特数的一组十进制表示”或==到“你想要的比特数的十进制表示”

此外,如果你在没有Scala或spark的情况下尝试现有的计算,你会发现你理解错误的地方,例如,在这里使用:

https://www.rapidtables.com/calc/math/binary-calculator.html

你会发现你定义的过滤器“错误”<代码>18

您的数据集标志列每行将只有一个值,因此只需筛选标志列,其值位于您想要的数字集中。

$”标志==18

(18,2,20)包含$”标志

 类似资料:
  • 我想实现一个环中值滤波器 - 它所做的基本上是用它周围的圆形环中的像素的中值替换中心像素。我可以像这样制作一些半径的圆形面具 然后,我可以使用 scipy 的通用过滤器来获取值的中位数 上面的蒙版包含了圆圈内的像素。哪些像素应该位于圆周上对我来说似乎有点模糊(想想3*3,5*5,7*7内核中的圆)。有没有“响铃”功能我可以用OTS什么的? 为什么要这么做-试着使用本文的一部分http://page

  • 你怎么能通过数据库,根据你的位置,在一个半径的距离内找到公司?

  • 我对验证FIR滤波器感兴趣。我已经实现了一个移动平均FIR滤波器,并编写了几个刺激来验证。 第一个刺激是一个正弦波,我希望滤波器按原样通过。档案员有。第二个刺激,我只传递一个冲动,并期望协效出现在输出上。这是我实际看到的。 然而,我觉得有两个问题需要注意。首先,不能依赖于波形形状来判断滤波器是否工作。我必须有可量化的值,并使用它作为一个基础,以得出结论,如果过滤器是工作的。例如。信噪比... 以下

  • 我有个问题。在常见的购物车网站有功能搜索产品与多个过滤器。例如,我正在搜索运动装备与一些过滤器,如: > 制造商 [x]耐克 阿迪达斯 茵宝 选项 尺寸 [x]s [x]M L [x]白色 黄色 红色 [x]蓝色 这是我的地图 部分测试数据 有了这个查询,一切都很好 但是,如果我在选项过滤器中添加更多的条件,我没有得到结果 我不知道我在映射或查询中是否错了,或者您能告诉我在这种情况下创建映射的最佳

  • 我正在构建API。我在弹性搜索中有身份证,名字,价格。客户机为我提供输入json和要应用的过滤器。 输入1:下面用户正在筛选ID=1(整数)的记录 输入2:用户正在查询带有city=tokyo的记录 用于处理输入和查询到弹性搜索的Java代码 对于过滤器中接收的每个键,我都在检查输入值的数据类型。 我想支持所有的专栏。我想要一个通用的解决方案,而不检查输入数据类型。 输入3: 在不对每个字段及其数

  • 我对和的用途有点困惑。 正如我从文档中理解的,拦截器在请求之间运行。另一方面,Filter在呈现视图之前运行,但在Controller呈现响应之后运行。 那么,拦截器中的和过滤器中的之间的区别在哪里呢?