版权声明:本文为博主原创文章,未经博主允许不得转载。 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. 设置更大的任务实例,可提高运行速度,如下:
# 其他参数略
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;"