2016-05-14 36 views
3

我想添加一個新的列到Dataframe,一個UUID生成器。將新列添加到數據框。新列我希望它是一個UUID生成器

UUID值看起來像21534cf7-cff9-482a-a3a8-9e7244240da7

我的研究:

我試着火花withColumn方法。

val DF2 = DF1.withColumn("newcolname", DF1("existingcolname" + 1) 

因此,DF2將有另外的列與newcolname與1添加到它的所有行。

通過我的要求是,我想有一個新列可生成UUID。

回答

11

你應該嘗試這樣的事:

val sc: SparkContext = ... 
val sqlContext = new SQLContext(sc) 

import sqlContext.implicits._ 

val generateUUID = udf(() => UUID.randomUUID().toString) 
val df1 = Seq(("id1", 1), ("id2", 4), ("id3", 5)).toDF("id", "value") 
val df2 = df1.withColumn("UUID", generateUUID()) 

df1.show() 
df2.show() 

輸出將是:

+---+-----+ 
| id|value| 
+---+-----+ 
|id1| 1| 
|id2| 4| 
|id3| 5| 
+---+-----+ 

+---+-----+--------------------+ 
| id|value|    UUID| 
+---+-----+--------------------+ 
|id1| 1|f0cfd0e2-fbbe-40f...| 
|id2| 4|ec8db8b9-70db-46f...| 
|id3| 5|e0e91292-1d90-45a...| 
+---+-----+--------------------+ 
+0

你好你的回答對我幫助很大 – Sri

+0

好聽到@Sri;)我將是標記我的答案爲接受一個感激。 –

+0

是的,確定完成 – Sri

2

這是我們在Java中如何做,我們有一列日期和希望增加與一個月另一列。

Dataset<Row> newData = data.withColumn("month", month((unix_timestamp(col("date"), "MM/dd/yyyy")).cast("timestamp"))); 

您可以使用類似的技術添加任何列。

Dataset<Row> newData1 = newData.withColumn("uuid", lit(UUID.randomUUID().toString())); 

乾杯!

相關問題