使用hash-mod对数据帧进行采样



我有一个带有字段transactionId的数据帧,我想对此进行采样领域我想对字段的哈希进行采样,因为采样的数据将连接到另一个采样数据帧的样本,并且我想在两个样本中都有相同的id。问题是,我在尝试了各种版本的后,一直被困在如何在过滤器中进行哈希和mod上

scala> val dfSampled = df.filter($"transactionId".hashCode() % 10 == 0)
    <console>:27: error: overloaded method value filter with alternatives:
    (conditionExpr: String)org.apache.spark.sql.DataFrame <and>
    (condition: org.apache.spark.sql.Column)org.apache.spark.sql.DataFrame
    cannot be applied to (Boolean)
            val dfSampled = df.filter($"transactionId".hashCode() % 10 == 0)
                              ^

`

有人能给我一些建议吗

这是不正确的,原因有两个:

  • 取列对象的散列而不是CCD_ 1中的值
  • 您使用了不正确的相等运算符

正确的解决方案是这样的:

import org.apache.spark.sql.functions.hash
val df = sc.range(1L, 100L).toDF("transactionId").show
// +-------------+
// |transactionId|
// +-------------+
// |            4|
// |           16|
// |           18|
// |           26|
// |           27|
// +-------------+
df.filter(hash($"transactionId") % 10 === 0)

请注意,它使用的是Murmur3Hash,而不是哈希代码。

相关内容

  • 没有找到相关文章

最新更新