Сохранение файла Spark- SQL как csv - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь сохранить вывод Spark SQL по пути, но не знаю, какую функцию использовать. Я хочу сделать это без использования искровых фреймов данных. Я пытался использовать write.mode ("overwrite") .csv ("file: /// home / user204943816622 / Task_3a-out") , но безуспешно. Может кто-нибудь сказать, как это сделать?

Примечание: spark SQL выдаст вывод в нескольких файлах. Необходимо обеспечить глобальную сортировку данных по всем файлам (частям). Таким образом, все слова в части 0 будут в алфавитном порядке перед словами в части 1.

case class Docword(docId: Int, vocabId: Int, count: Int)
case class VocabWord(vocabId: Int, word: String)

// Read the input data
val docwords = spark.read.
  schema(Encoders.product[Docword].schema).
  option("delimiter", " ").
  csv("hdfs:///user/bdc_data/t3/docword.txt").
  as[Docword]
val vocab = spark.read.
  schema(Encoders.product[VocabWord].schema).
  option("delimiter", " ").
  csv("hdfs:///user/bdc_data/t3/vocab.txt").
  as[VocabWord]

docwords.createOrReplaceTempView("docwords")
vocab.createOrReplaceTempView("vocab")

spark.sql("""SELECT vocab.word AS word1, SUM(count) count1 FROM
docwords INNER JOIN vocab
ON docwords.vocabId = vocab.vocabId
GROUP BY word
ORDER BY count1 DESC""").show(10)

write.mode("overwrite").csv("file:///home/user204943816622/Task_3a-out")

// Required to exit the spark-shell
sys.exit(0)

1 Ответ

0 голосов
/ 28 мая 2020

.show() возвращает void, вы должны указать что-то вроде ниже

val writeDf = spark.sql("""SELECT vocab.word AS word1, SUM(count) count1 FROM
docwords INNER JOIN vocab
ON docwords.vocabId = vocab.vocabId
GROUP BY word
ORDER BY count1 DESC""")
writeDf.write.mode("overwrite").csv("file:///home/user204943816622/Task_3a-out")
writeDf.show() // this should not be used in prod environment
...