0

我正在使用 Spark Scala 中的 SCDTYPE2,因此我的代码每天都会创建新的数据框,并且我需要知道如何在每天创建数据框时使用新的唯一 ID 进行标记

我已经尝试过monotonically_increasing_id()创建唯一 ID 的功能。但它在每个数据帧中生成唯一的 id。但它对于每次运行都不是唯一的。每次运行都会重复相同的唯一 ID。

此外,我尝试在我的数据框中使用时间戳列创建唯一 id,monotonically_increasing_id但它以双精度数据类型提供输出,我已转换回整数/字符串,但它对 id 进行舍入并生成重复的 Id。

 val DF2 =DF1.withColumn("key1",((date_format(col("date_column"), "ddmmyy")*24*60+ date_format(col("date_column"), "HHmmss")*60 + monotonically_increasing_id())*(-1)).cast(IntegerType)).withColumn("key2",$"key1".cast(StringType)).withColumn("date1",(date_format(col("date_column"), "ddmmyy")*24*60)).withColumn("date2",(date_format(col("date_column"), "HHmmss")*60 )).withColumn("id",monotonically_increasing_id()*(-1)).select($"date_column",$"date1",$"date2",$"id",$"key1",$"key2")

我希望无论数据帧的生成如何,都应该生成唯一的 id。如果有人能指出我正确的方向,那将很有帮助。

4

2 回答 2

0

请参阅我对这个问题的回答如何在 Spark 中实现缓慢变化的维度 (SCD2) 类型 2

这解决了所有问题,您也可以看到问题的答案。

于 2019-04-11T18:55:05.107 回答
0

查看uuid模块:https ://docs.python.org/3/library/uuid.html

您可以使用uuid.uuid4()完全随机的 id。或者uuid.uudi1()对于更复杂的连续 id。

于 2019-04-11T14:05:11.140 回答