分别哈希列类型Array [Int]的内容

时间:2019-01-23 20:09:57

标签: scala apache-spark

我有一个Int, Array[Int]的DataFrame,其值为

+---+------+
| _1|    _2|
+---+------+
|  1|   [1]|
|  1|   [2]|
|  2|[3, 4]|
+---+------+

我要返回的数据框

+---+------+------------------+
| _1|    _2|                _3|
+---+------+------------------+
|  1|   [1]|         [hash(1)]|
|  1|   [2]|         [hash(2)]|
|  2|[3, 4]|[hash(3), hash(4)]|
+---+------+------------------+

我最初尝试将DataFrame转换为数据集并映射数据集。但是,我无法使用MurmurHash3复制哈希。 简而言之,我无法复制https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/functions.scala#L2165-L2168

关于如何进行的任何想法?

我乐于接受任何方法以获得期望的结果。

1 个答案:

答案 0 :(得分:4)

使用transform

val df = Seq((1, Seq(1)), (1, Seq(2)), (2, Seq(3, 4))).toDF

df.selectExpr("*", "transform(_2, x -> hash(x)) AS _3").show
+---+------+--------------------+
| _1|    _2|                  _3|
+---+------+--------------------+
|  1|   [1]|        [-559580957]|
|  1|   [2]|        [1765031574]|
|  2|[3, 4]|[-1823081949, -39...|
+---+------+--------------------+