Spark-SQL导出查询结果的两种方式

5 篇文章 0 订阅

为了分析数据的需要,我们需要导出Spark-SQL的查询结果,通过Spark SQL CLI有两种方式。

1. 使用“-e”参数

与“Hive”一样,Spark SQL CLI也支持“-e”参数,使用方式如下:

# 分成多行是为了便于阅读
# 执行时请去掉多余的回车
spark-sql --num-executors 100 
          -e "select * from table" > results.txt 

也可以直接指定数据库名称,如下:

# 分成多行是为了便于阅读
# 执行时请去掉多余的回车
spark-sql --database mydb 
          --num-executors 100 
          -e "select * from table" > results.txt 

2. 使用“-f”参数

当SQL语句较长时,为了便于理解,我们可以将SQL语句放入单独的文件中,如创建“sdk.sql”文件,如下:

select * from table

然后,添加“-f”参数,如下:

spark-sql --database mydb --num-executors 100 -f sdk.sql > results.txt

3. 交互参数“-S”与“-v”

如果希望避免出现“Application Id: application_1528186718074_3408343”的信息,可以使用“-S”参数,如下:

# 分成多行是为了便于阅读
# 执行时请去掉多余的回车
spark-sql --num-executors 100
          -S
          -e "select * from table" > results.txt 

另外一面,希望打印Spark每步的执行信息,则可以添加“-v”参数,如下:

# 分成多行是为了便于阅读
# 执行时请去掉多余的回车
spark-sql --num-executors 100
          -v
          -e "select * from table" > results.txt 

4. 参数替换

为了复用SQL语句,需要在SQL语句中添加参数,如下:

select * from table where year=${year} and month='09' and day='03' limit 10;

如果直接在命令行执行,这时会直接读取Shell变量,所以我们需要定义Shell变量“year”,如下:

export year=2018
# 分成多行是为了便于阅读
# 执行时请去掉多余的回车
spark-sql --num-executors 100
          -v
          -e "select * from mydb.table where year=${year} and month='09' and day='03' limit 10;" > results.txt

如果需要进入Spark Sql Cli中执行,这时就可以使用“-d”定义参数,如下:

spark-sql --num-executors 100 -d year=2018
#   进入Spark Sql Cli,这时可以进行变量替换
select * from sec_ods.sdk where year=${year} and month='09' and day='03' limit 10;"

5. 其他

1. 设置更大的任务实例,可提高运行速度,如下:

#   其他参数略
spark-sql --conf "spark.dynamicAllocation.maxExecutors=200"

2. 增大内存数量来处理巨量数据,如下:

#   方式1
spark-sql --driver-memory 8g -e "select * from table"
#   方式2
spark-sql --conf "spark.driver.maxResultSize=8g" -e "select * from table"
#   方式3
spark-sql -e "set spark.driver.maxResultSize=8g;select * from table;"
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值