sql-生成64位的随机整数
sql-Generate random integers of 64 bits
我需要使用 Spark SQL 生成 64 位随机整数以作为替代键插入已存在的 table
我试过 FLOOR(RAND()*( POW(2,64) -1)
我得到的数字看起来像 1.2345 或 9.678E
我如何正确生成数字?
floor
return 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)
我需要使用 Spark SQL 生成 64 位随机整数以作为替代键插入已存在的 table
我试过 FLOOR(RAND()*( POW(2,64) -1)
我得到的数字看起来像 1.2345 或 9.678E
我如何正确生成数字?
floor
return 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)