【问题标题】:sql-Generate random integers of 64 bitssql-生成64位随机整数
【发布时间】:2016-03-14 02:34:05
【问题描述】:

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

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

【问题讨论】:

  • 你用的是什么数据库?
  • 生成二进制表单会有帮助吗?
  • 为什么你用 Spark SQL 生成随机数,而不是 Scala/Python/Java 或任何你使用 Spark 的语言?
  • 因为我需要它作为我的 SQL 表的代理键

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


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2014-12-20
    • 1970-01-01
    • 2020-10-01
    相关资源
    最近更新 更多