Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 合并独立spark上的拼花地板文件_Apache Spark_Apache Spark Sql - Fatal编程技术网

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)
已将我保存至今
如果您的表已分区,那么也可以使用
重新分区(“分区键”)