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
希望这能对其他人有所帮助。我的回答有用吗?