sql-生成64位的随机整数

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

我需要使用 Spark SQL 生成 64 位随机整数,以作为现有表的代理键插入

我尝试了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)

关于sql-生成64位的随机整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34168321/

相关文章:

java - 如何从 Java 中的 txt 文件中读取 sql 查询

java - SQL IN 或 NOT IN 取决于 boolean 参数

c - 如何在c中创建一个像1000行和列的大矩阵?

scala - 连接类型是否定义为 Apache Spark 中某处可访问的常量?

scala - Spark SQL DataFrame——distinct() 与 dropDuplicates()

mysql - 查找连续字段,直到字段更改并将序列号添加到具有相同名称的行

sql - 解析 SQL 表中以破折号分隔的值并进行查找

c++ - 为什么这个随机数生成器生成相同的数字?

java - 将随机值按一定比例均匀分布在二维数组中

mysql - Spark : Reading big MySQL table into DataFrame fails