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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yiifaa/article/details/82465767

为了分析数据的需要,我们需要导出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. 设置更大的任务实例,可提高运行速度,如下:

扫描二维码关注公众号,回复: 3870872 查看本文章
#   其他参数略
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;"

猜你喜欢

转载自blog.csdn.net/yiifaa/article/details/82465767