Я использую spark и scala на jdk1.8. Я новичок в Scala.
Я читаю текстовый файл (pat1.txt), который выглядит следующим образом:
Теперь я читаю этот файл из своего скала-кода как:
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 столбец под заголовком, который называется «значением».Таким образом, выходной файл выглядит следующим образом:
Если я изменю 'myQuery' на:
select p1.FIRST_NAME, p1.LAST_NAME,p1.HOBBY from PAT1 p1
Выдает исключение как:
Мой ввод может быть в любом формате (например, может быть текст / CSVи может иметь сжатие) и вывод всегда будет в .csv
Мне трудно понять, как изменить часть чтения, чтобы созданное представление могло иметь столбцы соответствующим образом. Могу ли я получить помощь по этому вопросу?.