分享

spark-shell 如何在运行时选择parquet压缩方式

Tesla 2019-1-7 09:52:53 发表于 疑问解答 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 8018
RT
用的spark2.4 默认parquet压缩为snappy,我想在shell启动后动态调整压缩方式
请问大佬们 如何解决。。

已有(3)人评论

跳转到指定楼层
s060403072 发表于 2019-1-7 13:09:54
shell执行后,在执行新的任务后应该可以的。
也可以修改配置,修改后生效,在启动新的任务,也是可以的。如果任务正在执行,然后修改压缩方式,这个任务应该不会立即修改的。否则文件就损坏了。


回复

使用道具 举报

Tesla 发表于 2019-1-7 16:54:30
s060403072 发表于 2019-1-7 13:09
shell执行后,在执行新的任务后应该可以的。
也可以修改配置,修改后生效,在启动新的任务,也是可以的。 ...

我知道可以,我的问题是怎么修改。。。
回复

使用道具 举报

yaojiank 发表于 2019-1-7 18:17:37
Tesla 发表于 2019-1-7 16:54
我知道可以,我的问题是怎么修改。。。

这个问题比较复杂。

首先配置项可以在spark submit的时候,提交修改参数。如下形式-conf
./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \


修改配置项:
spark.io.compression.codec=snappy
但是这个配置项是用于压缩内部数据的codec,例如RDD分区、广播变量和shuffle输出。

如果楼主想让输入的数据,输出的时候,使用这种格式,需要代码里面是支持的,也就是必须通过代码实现,而不是修改配置项。
代码实现如下:
/tmp/dj/11为json数据
将数据压缩存储成parquet
val logs = spark.read.json("/tmp/dj/11")
logs.coalesce(2).write.parquet("/tmp/dj/parquet2")

读取parquet文件
val logs1 = spark.read.parquet("/tmp/dj/parquet2/*")


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条