Apache spark 合并独立spark上的拼花地板文件
有没有一种简单的方法可以将Apache spark 合并独立spark上的拼花地板文件,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,有没有一种简单的方法可以将DataFrame保存到单个parquet文件中,或者将包含元数据的目录和由sqlContext.saveAspQuetFile()生成的parquet文件的一部分合并到NFS上存储的单个文件中,而无需使用HDFS和hadoop?只保存一个文件,在保存数据之前,您可以在RDD/Dataframe上调用coalesce(1)/重新分区(1) 如果您已经有一个包含小文件的目录,您可以创建一个压缩程序进程,该进程将读取现有文件并将其保存到一个新文件中。例如 val rows
DataFrame
保存到单个parquet
文件中,或者将包含元数据的目录和由sqlContext.saveAspQuetFile()
生成的parquet
文件的一部分合并到NFS上存储的单个文件中,而无需使用HDFS和hadoop?只保存一个文件,在保存数据之前,您可以在RDD/Dataframe上调用coalesce(1)
/重新分区(1)
如果您已经有一个包含小文件的目录,您可以创建一个压缩程序进程,该进程将读取现有文件并将其保存到一个新文件中。例如
val rows = parquetFile(...).coalesce(1)
rows.saveAsParquetFile(...)
可以使用saveAspQuetFile将数据存储到本地文件系统。e、 g
rows.saveAsParquetFile("/tmp/onefile/")
要仅保存一个文件而不是多个文件,可以在保存数据之前在RDD/Dataframe上调用
coalesce(1)
/repartition(1)
如果您已经有一个包含小文件的目录,您可以创建一个压缩程序进程,该进程将读取现有文件并将其保存到一个新文件中。例如
val rows = parquetFile(...).coalesce(1)
rows.saveAsParquetFile(...)
可以使用saveAspQuetFile将数据存储到本地文件系统。e、 g
rows.saveAsParquetFile("/tmp/onefile/")
我能够使用Spark 1.6.1中的snappy格式使用此方法压缩拼花地板文件。我使用了覆盖,以便在需要时可以重复该过程。这是代码
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.SaveMode
object CompressApp {
val serverPort = "hdfs://myserver:8020/"
val inputUri = serverPort + "input"
val outputUri = serverPort + "output"
val config = new SparkConf()
.setAppName("compress-app")
.setMaster("local[*]")
val sc = SparkContext.getOrCreate(config)
val sqlContext = SQLContext.getOrCreate(sc)
sqlContext.setConf("spark.sql.parquet.compression.codec", "snappy")
import sqlContext.implicits._
def main(args: Array[String]) {
println("Compressing Parquet...")
val df = sqlContext.read.parquet(inputUri).coalesce(1)
df.write.mode(SaveMode.Overwrite).parquet(outputUri)
println("Done.")
}
}
我能够使用Spark 1.6.1中的snappy格式使用此方法压缩拼花地板文件。我使用了覆盖,以便在需要时可以重复该过程。这是代码
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.SaveMode
object CompressApp {
val serverPort = "hdfs://myserver:8020/"
val inputUri = serverPort + "input"
val outputUri = serverPort + "output"
val config = new SparkConf()
.setAppName("compress-app")
.setMaster("local[*]")
val sc = SparkContext.getOrCreate(config)
val sqlContext = SQLContext.getOrCreate(sc)
sqlContext.setConf("spark.sql.parquet.compression.codec", "snappy")
import sqlContext.implicits._
def main(args: Array[String]) {
println("Compressing Parquet...")
val df = sqlContext.read.parquet(inputUri).coalesce(1)
df.write.mode(SaveMode.Overwrite).parquet(outputUri)
println("Done.")
}
}
coalesce(N)
迄今为止救了我一命如果您的表已分区,那么也可以使用
重新分区(“分区键”)
。coalesce(N)
已将我保存至今如果您的表已分区,那么也可以使用
重新分区(“分区键”)