Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 添加唯一ID的Spark数据集_Apache Spark_Apache Spark Sql_Spark Dataframe_Apache Spark Dataset - Fatal编程技术网

Apache spark 添加唯一ID的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

我正在查看spark数据集上是否有一个“已经实现的替代方案”来添加
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