PySpark-获取具有相同值的数组的元素数

安迪

我正在学习Spark,遇到一个无法克服的问题。我想要实现的是在相同位置获得2个数组具有相同值的元素数量。我可以通过Python UDF得到我想要的东西,但是我想知道是否有一种只使用Spark函数的方法。

df_bits = sqlContext.createDataFrame([[[0, 1, 1, 0, 0, ],
                                       [1, 1, 1, 0, 1, ],
                                     ]],['bits1', 'bits2'])
df_bits_with_result = df_bits.select('bits1', 'bits2', some_magic('bits1', 'bits2').show()


+--------------------+--------------------+---------------------------------+
|bits1                  |bits2                  |some_magic(bits1, bits2)|
+--------------------+--------------------+---------------------------------+
|[0, 1, 1, 0, 1, ]    |[1, 1, 1, 0, 0, ]   |3                                      |
+--------------------+--------------------+---------------------------------+

为什么是3?比特1 [1] ==比特2 [1]与比特1 [2] ==比特2 [2]与比特1 [3] ==比特2 [3]
我试图玩rdd.reduce但没有运气。

也许这很有帮助-

spark>=2.4

使用aggregatezip_with

 val df = spark.sql("select array(0, 1, 1, 0, 0, null) as bits1, array(1, 1, 1, 0, 1, null) as bits2")
    df.show(false)
    df.printSchema()

    /**
      * +----------------+----------------+
      * |bits1           |bits2           |
      * +----------------+----------------+
      * |[0, 1, 1, 0, 0,]|[1, 1, 1, 0, 1,]|
      * +----------------+----------------+
      *
      * root
      * |-- bits1: array (nullable = false)
      * |    |-- element: integer (containsNull = true)
      * |-- bits2: array (nullable = false)
      * |    |-- element: integer (containsNull = true)
      */

    df.withColumn("x", expr("aggregate(zip_with(bits1, bits2, (x, y) -> if(x=y, 1, 0)), 0, (acc, x) -> acc + x)"))
      .show(false)

    /**
      * +----------------+----------------+---+
      * |bits1           |bits2           |x  |
      * +----------------+----------------+---+
      * |[0, 1, 1, 0, 0,]|[1, 1, 1, 0, 1,]|3  |
      * +----------------+----------------+---+
      */

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Pyspark - 从具有最小值和最大值范围的数组中获取值

来自分类Dev

获取它在数组中具有值的元素数

来自分类Dev

Pyspark cumsum在orderBy列中具有相同的值

来自分类Dev

在 PySpark 中获取具有重复值的组

来自分类Dev

过滤出具有相同值的对象删除元素数组

来自分类Dev

爆炸具有数组的列-PySpark

来自分类Dev

pyspark如果列具有相同的值,如何合并列值

来自分类Dev

在具有相同ID pyspark数据框的另一列中显示不同的值

来自分类Dev

从pyspark数据框中删除具有相同值但在不同列中的重复行

来自分类Dev

使用WithColumn为所有Pyspark列元素分配相同的值

来自分类Dev

XQuery,获取具有相同值的元素?

来自分类Dev

Pyspark:如何为另一列中具有相同值的所有行设置相同的 id?

来自分类Dev

获取具有特定href属性的元素数组

来自分类Dev

如何删除在特定列上具有相同值的重复记录并使用 pyspark 保留具有最高时间戳的记录

来自分类Dev

pyspark sql具有计数

来自分类Dev

根据pyspark中另一列的值编辑具有相同id的列的所有行的值

来自分类Dev

使用Pyspark获取数组中最常见的元素

来自分类Dev

获取pyspark数组类型列的后n个元素

来自分类Dev

从PySpark中的几列从groupby获取具有最大值的行

来自分类Dev

如何获取pyspark数据框中具有最大值的列的名称

来自分类Dev

数组元素的总和取决于值条件pyspark

来自分类Dev

PySpark 数组列

来自分类Dev

PySpark 排序结构数组

来自分类Dev

串联数组pyspark

来自分类Dev

Pyspark数组保留顺序

来自分类Dev

Pyspark将StructType列聚合为每一行的元素数组

来自分类Dev

python,pyspark:获取pyspark数据框列值的总和

来自分类Dev

PySpark翻转键/值

来自分类Dev

从密钥访问值-pyspark

Related 相关文章

  1. 1

    Pyspark - 从具有最小值和最大值范围的数组中获取值

  2. 2

    获取它在数组中具有值的元素数

  3. 3

    Pyspark cumsum在orderBy列中具有相同的值

  4. 4

    在 PySpark 中获取具有重复值的组

  5. 5

    过滤出具有相同值的对象删除元素数组

  6. 6

    爆炸具有数组的列-PySpark

  7. 7

    pyspark如果列具有相同的值,如何合并列值

  8. 8

    在具有相同ID pyspark数据框的另一列中显示不同的值

  9. 9

    从pyspark数据框中删除具有相同值但在不同列中的重复行

  10. 10

    使用WithColumn为所有Pyspark列元素分配相同的值

  11. 11

    XQuery,获取具有相同值的元素?

  12. 12

    Pyspark:如何为另一列中具有相同值的所有行设置相同的 id?

  13. 13

    获取具有特定href属性的元素数组

  14. 14

    如何删除在特定列上具有相同值的重复记录并使用 pyspark 保留具有最高时间戳的记录

  15. 15

    pyspark sql具有计数

  16. 16

    根据pyspark中另一列的值编辑具有相同id的列的所有行的值

  17. 17

    使用Pyspark获取数组中最常见的元素

  18. 18

    获取pyspark数组类型列的后n个元素

  19. 19

    从PySpark中的几列从groupby获取具有最大值的行

  20. 20

    如何获取pyspark数据框中具有最大值的列的名称

  21. 21

    数组元素的总和取决于值条件pyspark

  22. 22

    PySpark 数组列

  23. 23

    PySpark 排序结构数组

  24. 24

    串联数组pyspark

  25. 25

    Pyspark数组保留顺序

  26. 26

    Pyspark将StructType列聚合为每一行的元素数组

  27. 27

    python,pyspark:获取pyspark数据框列值的总和

  28. 28

    PySpark翻转键/值

  29. 29

    从密钥访问值-pyspark

热门标签

归档