我正在使用Spark版本1.3.0并在Scala中使用带有SparkSQL的数据帧。在1.2.0版本中,有一个名为“saveAsText”的方法。在使用数据帧的1.3.0版中,只有一个“保存”方法。默认输出是镶木地板 如何使用save方法指定输出应为TEXT?
// sc is an existing SparkContext.
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
// this is used to implicitly convert an RDD to a DataFrame.
import sqlContext.implicits._
// Define the schema using a case class.
// Note: Case classes in Scala 2.10 can support only up to 22 fields. To work around this limit,
// you can use custom classes that implement the Product interface.
case class Person(name: String, age: Int)
// Create an RDD of Person objects and register it as a table.
val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()
people.registerTempTable("people")
// SQL statements can be run by using the sql methods provided by sqlContext.
val teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19")
teenagers.save("/user/me/out")
答案 0 :(得分:12)
您可以使用:
teenagers.rdd.saveAsTextFile("/user/me/out")
答案 1 :(得分:8)
首先,您应该考虑是否确实需要将数据框保存为文本。
由于DataFrame
按列保存数据(而不是按行保存为rdd),因此.rdd
操作成本很高,因为需要对数据进行重新处理。
实木复合地板是一种柱状格式,使用效率更高。
话虽如此,有时你确实需要保存为文本文件。
据我所知DataFrame
开箱即用,不允许您保存为文本文件。
如果查看source code,您会看到支持4种格式:
jdbc
json
parquet
orc
所以您的选项要么使用之前建议的df.rdd.saveAsTextFile
,
或者使用spark-csv,这将允许您执行以下操作:
Spark 1.4 +:
val df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").load("cars.csv")
df.select("year", "model").write.format("com.databricks.spark.csv").save("newcars.csv")
Spark 1.3:
val df = sqlContext.load("com.databricks.spark.csv", Map("path" -> "cars.csv", "header" -> "true"))
df.select("year", "model").save("newcars.csv", "com.databricks.spark.csv")
具有处理引用和转义字符串的恼人部分的附加值
答案 2 :(得分:1)
如果您查看迁移指南https://spark.apache.org/docs/latest/sql-programming-guide.html#upgrading-from-spark-sql-10-12-to-13,就可以看到
[...] DataFrames不再直接从RDD继承[...]
如果使用“.rdd”方法获取RDD [Row],仍然可以使用saveAsTextFile。
答案 3 :(得分:1)
在python中:为dataframe df
获取CSV(无标题)df.rdd.map(lambda r: ";".join([str(c) for c in r])).saveAsTextFile(outfilepath)
还有Databricks开发的扩展:spark-csv