sql生成64位的随机整数



我需要使用Spark SQL生成64位随机int,以插入作为现有表的替代密钥

我试过FLOOR(RAND()*( POW(2,64) -1),得到的数字看起来像1.2345或9.678E如何正确生成数字?

floor返回double而不是bigint/long。您应该强制转换为long/LongType以获得整数。例如,如果你只想要正值,那么像这样的东西就可以了:

import org.apache.spark.sql.functions.rand
val df = sc.parallelize(Seq(
  (1L, "foo"), (2L, "bar"), (3L, "baz"))).toDF("x", "y")
df.select(((rand * Long.MaxValue)).cast("long").alias("rnd")).show
// +-------------------+
// |                rnd|
// +-------------------+
// |2231557941154186240|
// | 494304530857112576|
// |7931286845854403584|
// +-------------------+

如果你只想生成代理密钥,最好使用monotonicallyIncreasingId

import org.apache.spark.sql.functions.monotonicallyIncreasingId
df.select(monotonicallyIncreasingId)

相关内容

  • 没有找到相关文章

最新更新