我有一个带有字段transactionId的数据框,我想对此进行采样 领域。我想在字段的散列上进行采样,因为采样数据将连接到另一个采样数据帧的样本,我想在两个样本中都有相同的ID。问题是我已经开始考虑如何在过滤器中进行散列和修改,尝试了各种版本的
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)
^
`
任何人都可以给我一些建议
答案 0 :(得分:0)
这有两个不同的原因:
DataFrame
,正确的解决方案是这样的:
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
而不是哈希码。