用scala在spark中读取压缩文件
Posted
技术标签:
【中文标题】用scala在spark中读取压缩文件【英文标题】:reading compressed file in spark with scala 【发布时间】:2017-06-17 10:03:05 【问题描述】:我正在尝试使用以下代码在数据帧/rdd 中读取 spark/scala 中 .gz 文件的内容
val conf = new SparkConf()
val sc = new SparkContext(conf)
val data = sc.wholeTextFiles("path to gz file")
data.collect().foreach(println);
.gz 文件为 28 mb,当我使用此命令进行 spark 提交时
spark-submit --class sample--master local[*] target\spark.jar
它在控制台中给出了一个 Java 堆空间问题。
这是读取 .gz 文件的最佳方式吗?如果是,我该如何解决 java 堆错误问题。
谢谢
【问题讨论】:
您的解决方案在reading multiple compressed files 原来的答案其实在这里***.com/questions/36604145/… Read whole text files from a compression in Spark的可能重复 【参考方案1】:免责声明:该代码和描述将纯粹使用 spark 读入一个小型压缩文本文件,将其收集到每行的数组中,并将整个文件中的每一行打印到控制台。在外面做这件事的方法和理由的数量远远超过在 spark 做的那些
1) 如果可以摆动它,请使用 SparkSession 而不是 SparkContext。 sparkSession.read.text()
是要使用的命令(它会自动处理一些压缩格式)
2)或者至少使用sc.textFile()
而不是wholeTextFiles
3)您正在调用 .collect 将整个文件带回驱动程序的数据(在这种情况下,因为您是本地而不是网络绑定)。如果必须进行收集,请将 --driver-memory 选项添加到 spark shell 以增加内存。
【讨论】:
以上是关于用scala在spark中读取压缩文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Spark 2.3.0 中读取 Zstandard 压缩文件