Вызов функции Spark Scala - PullRequest
       3

Вызов функции Spark Scala

0 голосов
/ 23 апреля 2020

Требование указано ниже:

val value = Array["id","sd","cd"]  -- List of columns 
val cols_list = Array["cd","id","tm","no","in","ts","nm"] -  -- List of columns 

abcd - это имя схемы. Нужны столбцы в значении и столбцы в cols_list, которые не имеют значения.

val alter = df.select(value + ("abcd." + x.toUpperCase() for x <- cols_list if x.toUpperCase() not in value)).where(df.status =="ALERT")

Ошибка в том, что он не может прочитать x. Требование - это датафрейм с выбранным условием и для l oop с отсутствием и действием. Любые идеи / предложения, пожалуйста.

Я пробовал, как показано ниже val diff_cols = value diff cols_list --- Похоже, это не очень хорошая идея.

         val alter = df.select(value + ("abcd." + diff_cols).where(df.status 
           =="ALERT")

но проблема, которую я вижу сейчас, заключается в вместо столбцов [L java .lang. String;@6cc9bbea проходит и терпит неудачу.

Подскажите, пожалуйста, есть ли у кого-нибудь другие решения?

1 Ответ

1 голос
/ 24 апреля 2020

Пожалуйста, проверьте ниже код.

В спарк вы можете получить доступ к столбцам без имени схемы.

scala> val value = Array("id","sd","cd")
value: Array[String] = Array(id, sd, cd)

scala> val cols_list = Array("cd","id","tm","no","in","ts","nm")
cols_list: Array[String] = Array(cd, id, tm, no, in, ts, nm)

scala> val columns = value ++ cols_list.diff(value)
columns: Array[String] = Array(id, sd, cd, tm, no, in, ts, nm)

scala> val schema = "abcd"
schema: String = abcd

scala> columns.map(column => s"${schema}.${column}") // This step is not required, in spark you can access columns without schema name. if you still want you can use like this.
res14: Array[String] = Array(abcd.id, abcd.sd, abcd.cd, abcd.tm, abcd.no, abcd.in, abcd.ts, abcd.nm)

scala> df.select(columns.head,columns.tail:_*).where($"status" === "ALERT")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...