Я пытаюсь использовать UDF и возвращать ListBuffer в качестве столбца из UDF, получаю ошибку.
Я создал Df, выполнив код ниже:
val df = Seq((1,"dept3@@rama@@kumar","dept3##rama#@kumar"), (2,"dept31@@rama1##kumar1","dept33##rama3#@kumar3")).toDF("id","str1","str2")
df.show()
это выглядит какниже:
+---+--------------------+--------------------+
| id| str1| str2|
+---+--------------------+--------------------+
| 1| dept3@@rama@@kumar| dept3##rama#@kumar|
| 2|dept31@@rama1##ku...|dept33##rama3#@ku...|
+---+--------------------+--------------------+
согласно моему требованию, которое я должен использовать, я должен разделить вышеприведенные столбцы на основе некоторых входных данных, чтобы я попробовал UDF, как показано ниже:
def appendDelimiterError=udf((id: Int, str1: String, str2: String)=> {
var lit = new ListBuffer[Any]()
if(str1.contains("@@"){val a=str1.split("@@")}
else if(str1.contains("##"){val a=str1.split("##")}
else if(str1.contains("#&"){val a=str1.split("#&")}
if(str2.contains("@@"){ val b=str2.split("@@")}
else if(str2.contains("##"){ val b=str2.split("##") }
else if(str1.contains("#@"){val b=str2.split("#@")}
var tmp_row = List(a,"test1",b)
lit +=tmp_row
return lit
})
val
Я пытаюсь позвонить, выполнив следующий код:
val df1=df.appendDelimiterError("newcol",appendDelimiterError(df("id"),df("str1"),df("str2"))
Я получаю сообщение об ошибке "Это был неправильный вызов". Я хочу использовать ListBuffer / list для сохранения и возврата к месту вызова.
мой ожидаемый результат будет:
+---+--------------------+------------------------+----------------------------------------------------------------------+
| id| str1| str2 | newcol |
+---+--------------------+------------------------+----------------------------------------------------------------------+
| 1| dept3@@rama@@kumar| dept3##rama#@kumar |ListBuffer(List("dept","rama","kumar"),List("dept3","rama","kumar")) |
| 2|dept31@@rama1##kumar1|dept33##rama3#@kumar3 | ListBuffer(List("dept31","rama1","kumar1"),List("dept33","rama3","kumar3")) |
+---+--------------------+------------------------+----------------------------------------------------------------------+
Как этого добиться?