Apache spark 添加唯一ID的Spark数据集
我正在查看spark数据集上是否有一个“已经实现的替代方案”来添加Apache spark 添加唯一ID的Spark数据集,apache-spark,apache-spark-sql,spark-dataframe,apache-spark-dataset,Apache Spark,Apache Spark Sql,Spark Dataframe,Apache Spark Dataset,我正在查看spark数据集上是否有一个“已经实现的替代方案”来添加appendunique ID 我的设想: 我有一个每天处理一批信息的增量作业。在这项工作中,我创建了一个something的维度表,并使用单调递增的\u id()为每一行分配唯一的id。第二天,我想在something表中添加一些行,并为这些行生成唯一的ID 例如: 第1天: something_table uniqueID name 100001 A 100002 B 第2天: something
append
unique ID
我的设想:
我有一个每天处理一批信息的增量作业。在这项工作中,我创建了一个something
的维度表,并使用单调递增的\u id()
为每一行分配唯一的id。第二天,我想在something
表中添加一些行,并为这些行生成唯一的ID
例如:
第1天:
something_table
uniqueID name
100001 A
100002 B
第2天:
something_table
uniqueId name
100001 A
100002 B
100003 C -- new data that must be created on day 2
第1天的剪切代码:
case class BasicSomething(name: String)
case class SomethingTable(id: Long, name: String)
val ds: Dataset[BasicSomething] = spark.createDataset(Seq(BasicSomething("A"), BasicSomething("B")))
ds.withColumn("uniqueId", monotonically_increasing_id())
.as[SomethingTable]
.write.csv("something")
我不知道如何使的状态保持单调递增的\u id()。因此,您可以使用该uniqueId,并使用单递增的\u id()创建新的uniqueId
ds.withColumn("uniqueId", monotonically_increasing_id()+last uniqueId of previous dataframe)
有官方的“已经实施的替代方案”,如果有其他建议,建议是离题的。另外,“保持状态”听起来不是一个好主意,因为高位已经被利用,所以您可以保留的信息量是有限的。如果设置为Long
,则可以使用基于现有数据的偏移量的zipWithIndex
。更好的us ID,可以像tuple(批处理,单调递增的ID)一样就地创建。@user6910411“保持状态听起来不是个好主意”是什么意思?如果没有固定ID,引用将如何工作?@MehdiB。我想这不是很清楚。如前所述,主要问题是分区号已经使用了上面的31位。所以,实际上,64位中只有很小的一部分可以被实际使用,或者换句话说,如果您有多个分区,那么您已经开始使用非常大的数字,并且向其中添加任何内容,这不是一个好主意。有许多健壮的方案允许您在分布式系统中生成唯一标识符,而无需保持状态—例如,请参阅MongoDB对象ID。感谢您的响应@user6910411