【发布时间】:2020-09-15 17:46:26
【问题描述】:
我正在尝试将 SparkSQL 的输出保存到路径,但不确定要使用什么函数。我想在不使用火花数据帧的情况下做到这一点。我正在尝试使用 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)
【问题讨论】:
-
你要写什么值?
-
在 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)
标签: scala csv apache-spark-sql