2016-11-07 3 views
2

у меня есть кадр данных с именем продуктов следующим образом:кадр Изменение данных с соответствующими именами столбцов (условно) в Спарк

Credit | Savings | Premium 
1  0   1 
0  1   1 
1  1   0 

Все значения столбцов Строка

Я хочу, чтобы преобразовать его на

Credit | Savings | Premium 
Credit 0   Premium 
0  Savings Premium 
Credit Savings 0 

in Spark?

Использование Spark 1.6.2 в Цеппелине.

+0

Как отметил @RamPrasad Пробовал этот 'вал udf1 = UDF {(наличие: String) => если (наличие == "1") «Кредит» еще «0» } '. Это сработало! Теперь я пытаюсь создать единую udf для всех столбцов, передав дополнительный параметр функции udf, такой как этот «val udf1 = udf {(presence: String, product: String) => if (presence ==" 1 ") product else «0» } df.withColumn («Кредит», udf1 (sanderProdSmall («Кредит»), «Кредит»)) 'Обнаружена ошибка: String (" ind_cco_fin_ult2 ") требуется: org.apache.spark. sql.Column –

ответ

3

Я предполагаю, что Credit , Savings , Premium строковые столбцы

import org.apache.spark.sql.functions._ // for `when` 

df : DataFrame = ..... 

df.replace("Credit", ImmutableMap.of("1", "Credit")) 
.replace("Savings ", ImmutableMap.of("1", "Savings ")) 
.replace("Premium", ImmutableMap.of("1", "Premium")); 

другие мудры вы также можете сделать, как это ...

df.withColumn("Credit", udf1) 
.withColumn("Savings ", udf2) 
.withColumn("Premium", udf3) 

где udf1, 2, 3 являются искровые UDFs для преобразования " 1 "к соответствующим названиям колонок ...

вместо udf. вы также можете использовать синтаксис when(cond, val).otherwise(val).

df.withColumn("Credit", when (df("Credit") === "1", lit("Credit")).otherwise(0) 
.withColumn("Savings", when (df("Savings") === "1", lit("Savings ")).otherwise(0) 
.withColumn("Premium", when (df("Premium") === "1", "Premium").otherwise(0) 

Это все .. Удачи :-)

+0

Эй, @RamPrasad Большое вам спасибо за указание на udfs. Пробовал этот 'code'val udf1 = udf {(наличие: String) => if (presence ==" 1 ")" Credit "else" 0 " }' code' –

+0

Я пытаюсь создать единую udf для всех столбцы, передавая дополнительный параметр функции udf, подобный этому: val udf1 = udf {(presence: String, product: String) => if (presence == "1") product else "0" }. Но когда я пытаюсь называть это udf, запустив df.withColumn («Кредит», udf1 (sanderProdSmall («Кредит»), «Кредит»)). Ошибка найдена: String («ind_cco_fin_ult2») требуется: org.apache .spark.sql.Column –

+0

yes udf 1 2 3 просто пример. вы можете создать единый udf. где всегда используется строка, которую вы можете использовать, например, «lit» («Кредит»), горит («Экономия»), горит («Премиум») '' lit' - это строковый столбец столбца Columntype с момента его ожидаемого типа столбца. –

Смежные вопросы