2016-12-23 2 views
1

У меня есть фреймворк Spark с нижеследующими столбцами.Извлеките значение столбца и назначьте его другому столбцу в виде массива в искровом информационном кадре

C1 | C2 | C3 | C4

1 | 2 | 3 | S1

2 | 3 | 3 | S2

4 | 5 | 3 | S2

Я хочу создать другой столбец C5, принимая различные значения из колонки C4 как C5

[S1,S2] 

[S1,S2] 

[S1,S2] 

Может кто-нибудь помочь мне, как добиться этого в свече кадра данных с помощью Scala

+0

Можете ли вы объяснить связь с C4 как ** S2 **, сгенерированный в C5. Что, если в C4 присутствует более 2 различных значений? – mrsrinivas

ответ

2

Вы можете для сбора отдельных элементов из столбца 4 и сначала поместить их в список, а затем использовать withColumn, чтобы создать новый столбец C5, создав udf, который всегда возвращает список констант:

val uniqueVal = df.select("C4").distinct().map(x => x.getAs[String](0)).collect.toList  
def myfun: String => List[String] = _ => uniqueVal 
def myfun_udf = udf(myfun) 

df.withColumn("C5", myfun_udf(col("C4"))).show 

+---+---+---+---+--------+ 
| C1| C2| C3| C4|  C5| 
+---+---+---+---+--------+ 
| 1| 2| 3| S1|[S2, S1]| 
| 2| 3| 3| S2|[S2, S1]| 
| 4| 5| 3| S2|[S2, S1]| 
+---+---+---+---+--------+