Scala 在SFTP中将文件另存为.txt.gz的Spark应用程序

Scala 在SFTP中将文件另存为.txt.gz的Spark应用程序,scala,apache-spark,sftp,Scala,Apache Spark,Sftp,我有一个Spark(Scala)应用程序,它将特定的数据帧保存在SFTP中,作为.txt文件。应用程序多次生成的文件达到20GB;这是消费者无法下载的东西。我想我可以压缩文件,这样我们就可以减小文件的大小(特别是一个文本文件,我们希望它有很好的压缩比) 在Spark中是否有我需要使用(导入)的参考资料或库可以为我提供一个压缩文件 提前感谢。您可以使用选项(“codec”、“org.apache.hadoop.io.compress.snappyCodec”)压缩文件。。有许多编解码器提供不同级别

我有一个
Spark
(Scala)应用程序,它将特定的数据帧保存在
SFTP
中,作为.txt文件。应用程序多次生成的文件达到20GB;这是消费者无法下载的东西。我想我可以压缩文件,这样我们就可以减小文件的大小(特别是一个文本文件,我们希望它有很好的压缩比)

Spark
中是否有我需要使用(导入)的参考资料或库可以为我提供一个压缩文件


提前感谢。

您可以使用
选项(“codec”、“org.apache.hadoop.io.compress.snappyCodec”)压缩文件。
。有许多编解码器提供不同级别的压缩,如
org.apache.hadoop.io.compress.gzicodec

如果文件另存为.txt,则不会产生任何效果,但如果使用
csv
parquet
Avro
格式,则效果会非常好。拼花地板和Avro格式在压缩状态下都是可拆分的,所以在处理之前无需手动解压缩,spark将自动解压缩

读取文本并另存为拼花地板的代码-

val df = spark.read.text("path to text file")

df.write.option("codec","org.apache.hadoop.io.compress.snappyCodec").parquet("destination path")

//read the file back
spark.read.parquet("path to compressed file").show()
读取CSV并另存为CSV.gz的代码

val df = spark.read.csv("path to test.csv")
df.write.option("codec","org.apache.hadoop.io.compress.GzipCodec").csv("path to test2.gzip")

因此,我尝试了不同的方法,试图将
.txt.gz
文件保存在
SFTP
中。我在谷歌上找到了一个
Java
代码,它将文本文件压缩成
.gz
,我只是在
Scala
中重写了这段代码,一切都很顺利

def zipFile(fileName1: String): Int = {
val gzpFile: String =  fileNameDotTxt + ".gz"

val SOURCE_FILE: String = pathToFileNameDotTxt 
val buffer: Array[Byte] = Array.ofDim[Byte](1024)
try {
  val gzos: GZIPOutputStream = new GZIPOutputStream(new FileOutputStream(gzpFile))
  val in: FileInputStream = new FileInputStream(SOURCE_FILE)
  var len: Int = 0
  while ({ len = in.read(buffer); len } > 0) gzos.write(buffer, 0, len)
  in.close()
  gzos.finish()
  gzos.close()


} catch {
  case ex: IOException =>
    ex.printStackTrace()

}
}

我们需要进口

import java.io.FileInputStream
import java.io.FileOutputStream
import java.util.zip.GZIPOutputStream

希望这能对其他人有所帮助。

我的回答有用吗?