我正在使用import {NgModule} from '@angular/core';
import {AdvertisementComponent} from './advertisement.component';
@NgModule({
imports: [],
declarations: [
AdvertisementComponent,
],
exports: [
AdvertisementComponent,
],
})
export class AdvertisementModule {
}
生成zipWithIndex
并将其添加为单独的列。
我正在使用类似于下面的代码:
sequence_number
我现在正试图提出一个用于增加负载的逻辑。 一个简单的加载,将新数据附加到现有数据上,并根据最后生成的编号生成序列号。
一种方法是通过获取val file = sparkSession.createDataFrame(lexusmasterrdd,structSchema)
val filerdd=file.rdd.zipWithIndex().map(indexedRow => Row.fromSeq((((indexedRow._2.toLong+1)).toLong) +: indexedRow._1.toSeq))
val newSchema=StructType(Array(StructField("Sequence_number",LongType,true)).++(file.schema.fields))
val finalDF=sparkSession.createDataFrame(filerdd,newSchema)
,然后为新数据添加一个max(Sequence_number)
函数。
但是还有其他方法可以在增量负载中使用row_number()
吗?
一些代码会有所帮助。
我在Scala中使用Spark 2.3
答案 0 :(得分:1)
通过获取max(Sequence_number)然后实现 与row_number()函数一起添加新数据。
这将起作用,但不能扩展,因为row_number()
需要将所有记录改组为1个分区。我宁愿使用monotonically_increasing_id()
:
//get max from "old" data
val prevMaxId = oldDf.select(max($"Sequence_number")).as[Long].head()
val addUniqueID : Column = monotonically_increasing_id() + prevMaxId
val finalDF = newDF.withColumn("Sequence_number",addUniqueID)
如果您想使用zipWithIndex
,则可以执行以下操作:
//get max from "old" data
val prevMaxId = oldDf.select(max($"Sequence_number")).as[Long].head()
val finalRDD = oldRdd.zipWithIndex().map{case (data,id) => (data, id+prevMaxId)}