Spark, Scala не может создать представление соответствующим образом после чтения из файла - PullRequest
0 голосов
/ 29 января 2019

Я использую spark и scala на jdk1.8. Я новичок в Scala.

Я читаю текстовый файл (pat1.txt), который выглядит следующим образом:

enter image description here

Теперь я читаю этот файл из своего скала-кода как:

val sqlContext = SparkSession.builder().getOrCreate()  
sqlContext.read
    .format(externalEntity.getExtractfileType)
    .option("compression", externalEntity.getCompressionCodec)
    .option("header", if (externalEntity.getHasHeader.toUpperCase == "Y") "true" else "false")
    .option("inferSchema", "true")
    .option("delimiter", externalEntity.getExtractDelimiter)
    .load(externalEntity.getFilePath)
    .createOrReplaceTempView(externalEntity.getExtractName)

И затемсделать запрос, как из моего кода Scala:

val queryResult = sqlContext.sql(myQuery)

и вывод генерируется как:

queryResult
 .repartition(LteGenericExtractEntity.getNumberOfFiles.toInt)
 .write.format("csv")
 .option("compression", LteGenericExtractEntity.getCompressionCodec)
 .option("delimiter", LteGenericExtractEntity.getExtractDelimiter)
 .option("header", "true"")
 .save(s"${outputDirectory}/${extractFileBase}")

Теперь, когда 'MyQuery'выше

select * from PAT1

Программа генерирует o / p как ( обратите внимание на дополнительную строку со значением "value", которая не была частью файла ).По сути, программа не может идентифицировать разделенные «,» столбцы во входном файле, и в выходных данных она создает 1 столбец под заголовком, который называется «значением».Таким образом, выходной файл выглядит следующим образом:

enter image description here

Если я изменю 'myQuery' на:

select p1.FIRST_NAME, p1.LAST_NAME,p1.HOBBY  from PAT1 p1

Выдает исключение как:

enter image description here

Мой ввод может быть в любом формате (например, может быть текст / CSVи может иметь сжатие) и вывод всегда будет в .csv

Мне трудно понять, как изменить часть чтения, чтобы созданное представление могло иметь столбцы соответствующим образом. Могу ли я получить помощь по этому вопросу?.

1 Ответ

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

Это похоже на CSV-файл, но с расширением .txt.Вы можете попробовать следующее:

  1. Передать этот файл как csv с дополнительными опциями, такими как spark.read.option("inferSchema", "true").option("header", "true").csv("path/to/file")
  2. После прочтения файла, как вы это сделали, просто укажите схему кадра данных как:
    sqlContext.read.format("text")
          .option("compression", "none")
          .option("delimiter", ",")
          .option("header", "true")
          .load("/tmp/pat1")
          .toDF("first_name", "last_name", "hobby")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...