Spark-shell: количество столбцов не совпадает - PullRequest
0 голосов
/ 21 января 2019

У меня есть файл формата csv, и он разделен символом разделителя "|".И набор данных имеет 2 столбца, как показано ниже.

Column1|Column2
1|Name_a
2|Name_b

Но иногда мы получаем только одно значение столбца, а другое отсутствует, как показано ниже

Column1|Column2
1|Name_a
2|Name_b
3
4
5|Name_c
6
7|Name_f

Таким образом, любая строка, имеющая несоответствующий столбец №, являетсядля нас в качестве мусора в приведенном выше примере это будут строки со значением столбца 3, 4, and 6, и мы хотим отбросить эти строки.Есть ли прямой способ, которым я могу отбросить эти строки, без исключения при чтении данных из spark-shell, как показано ниже.

val readFile = spark.read.option("delimiter", "|").csv("File.csv").toDF(Seq("Column1", "Column2"): _*)

Когда мы пытаемся прочитать файл, мы получаем следующее исключение.

java.lang.IllegalArgumentException: requirement failed: The number of columns doesn't match.
Old column names (1): _c0
New column names (2): Column1, Column2
  at scala.Predef$.require(Predef.scala:224)
  at org.apache.spark.sql.Dataset.toDF(Dataset.scala:435)
  ... 49 elided 

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Просто добавьте режим DROPMALFORMED к опции, как показано ниже, во время чтения.При установке этого параметра Spark удаляет поврежденные записи.

val readFile = spark.read
  .option("delimiter", "|")
  .option("mode", "DROPMALFORMED") // Option to drop invalid rows.
  .csv("File.csv")
  .toDF(Seq("Column1", "Column2"): _*)

Это задокументировано здесь .

0 голосов
/ 21 января 2019

Вы можете указать схему вашего файла данных и разрешить обнуление некоторых столбцов.В Scala это может выглядеть следующим образом:

val schm = StructType(
  StructField("Column1", StringType, nullable = true) ::
  StructField("Column3", StringType, nullable = true) :: Nil)

val readFile = spark.read.
option("delimiter", "|")
.schema(schm)
.csv("File.csv").toDF

Чем вы можете фильтровать ваш набор данных по столбцу, не является нулевым.

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