Соответствие имени столбца из файла CSV в спарк scala - PullRequest
2 голосов
/ 22 апреля 2020

Я хочу взять заголовки (имя столбца) из моего CSV-файла и хочу сопоставить его с моим существующим заголовком. Я использую следующий код:

val cc = sparksession.read.csv(filepath).take(1)

Это дает мне значение, например:

Array([id,name,salary]) 

, и я создал еще одну схему c stati, которая дает мне значение следующим образом:

val ss=Array("id","name","salary")

, а затем я пытаюсь сравнить имя столбца, используя условие if:

if(cc==ss){
  println("matched")
} else{
  println("not matched")
}

Я думаю, из-за несоответствия [] и () его всегда происходит в другой части Есть ли другой способ сравнить эти значения без учета [] и ()?

Ответы [ 3 ]

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

Во-первых, для удобства установите для параметра заголовка значение true при чтении файла:

val df = sparksession.read.option("header", true).csv(filepath)

Получите имена столбцов и определите ожидаемые имена столбцов:

val cc = df.columns
val ss = Array("id", "name", "salary")

Для проверки если два совпадения (без учета порядка):

if (cc.toSet == ss.toSet) {
  println("matched")
} else {
  println("not matched")
}

Если порядок актуален, то условие можно выполнить следующим образом (вы не можете использовать Array здесь, но Seq работает) :

cc.toSeq == ss.toSeq

или глубокое сравнение массивов:

cc.deep == d.deep
0 голосов
/ 22 апреля 2020

Ниже код работал для меня.

val cc= spark.read.csv("filepath").take(1)(0).toString

Приведенный выше код выводил в виде строки: [id, name, salary].

создал одну схему, указав

val ss="[id,name,salary]"

затем написал условия if else.

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

Прежде всего, я думаю, что вы пытаетесь сравнить Array[org.apache.spark.sql.Row] с Array[String]. Я считаю, что вы должны изменить способ загрузки заголовков примерно так: val cc = spark.read.format("csv").option("header", "true").load(fileName).columns.toArray. Тогда вы можете сравнить, используя cc .deep == ss.deep.

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