【问题标题】:Saving a Spark-SQL file as csv将 Spark-SQL 文件保存为 csv
【发布时间】: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


【解决方案1】:

.show() 返回 void 你应该 dp 如下所示

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

【讨论】:

  • 如果我想使用 Data frames 保存文件并仍然使用 .show() 怎么办?
  • 显示错误:write.mode("overwrite").csv("file:///home/user204943816622/Task_3a-out") :41: error: value mode is不是 org.apache.spark.sql.DataFrame 的成员 write.mode("overwrite").csv("file:///home/user204943816622/Task_3a-out")
  • 用 write 方法更新写命名约定的代码
  • 你能告诉我怎么做吗?
  • 我用过,但显示错误:writeDf.write().mode("overwrite").csv("file:///home/user204943816622/Task_3a-out") :137:错误:org.apache.spark.sql.DataFrameWriter[org.apache.spark.sql.Row] 不带参数 writeDf.write().mode("overwrite").csv("file:/ //home/user204943816622/Task_3a-out")
猜你喜欢
  • 2020-02-10
  • 1970-01-01
  • 2017-06-17
  • 2018-07-31
  • 2017-09-12
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多