sql-生成64位的随机整数

时间:2015-12-08 23:51:19

标签: sql random apache-spark apache-spark-sql

我需要使用Spark SQL生成64位随机整数,以插入已存在的表的surragate键

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

1 个答案:

答案 0 :(得分:3)

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)