通过gcloud dataproc作业提交spark-sql查询时,是否可以显示列标题?

时间:2018-04-17 07:39:41

标签: apache-spark-sql google-cloud-dataproc

我正在向dataproc发出一个spark-sql作业,只显示表中的一些数据:

gcloud dataproc jobs submit spark-sql --cluster mycluster --region europe-west1 -e "select * from mydb.mytable limit 10"

当返回数据并输出到stdout时,我没有看到列标题,我只看到原始数据,空格分隔。我真的希望输出格式更好,特别是我想看列标题。我试过这个:

gcloud dataproc jobs submit spark-sql --cluster mycluster --region europe-west1 -e "SET hive.cli.print.header=true;select * from mydb.mytable limit 10"

但它没有任何影响。

有没有办法让spark-sql在dataproc上显示列标题?

如果有办法像这样显示数据:

+----+-------+
| ID | Name  |
+----+-------+
| 1  | Jim   |
| 2  | Ann   |
| 3  | Simon |
+----+-------+
然后那会更好。

1 个答案:

答案 0 :(得分:1)

我一直在使用Dataproc集群执行一些测试,看起来无法使用Spark SQL检索具有列名的查询结果。但是,这更像是一个Apache Spark SQL问题,而不是Dataproc,所以我也将这个标记添加到你的问题中,以便它得到更好的关注。

如果您进入Dataproc集群中的Spark SQL控制台(通过在主服务器中进行SSH连接并键入spark-sql),您将看到 SELECT 查询的结果不包括表名:

SELECT * FROM mytable;
18/04/17 10:31:51 INFO org.apache.hadoop.mapred.FileInputFormat: Total input files to process : 3
2       Ann
1       Jim
3       Simon

如果使用SELECT ID FROM mytable;,则没有变化。因此,问题不在gcloud dataproc jobs sbmit spark-sql命令中,而在于Spark SQL不提供此类数据。

如果您不一定要使用Spark SQL,可以尝试使用using HIVE。 HIVE确实提供了您想要的信息类型(包括列名称和更漂亮的格式):

user@project:~$ gcloud dataproc jobs submit hive --cluster <CLUSTER_NAME> -e "SELECT * FROM mytable;"
Job [JOB_ID] submitted.
Waiting for job output...
+-------------+---------------+--+
| mytable.id  | mytable.name  |
+-------------+---------------+--+
| 2           | Ann           |
| 1           | Jim           |
| 3           | Simon         |
+-------------+---------------+--+
Job [JOB_ID] finished successfully.