通过 gcloud dataproc jobs submit spark-sql 查询时可以显示列标题吗?

Can I display column headings when querying via gcloud dataproc jobs submit spark-sql?

我正在向 dataproc 发布一个 spark-sql 作业,它只显示来自 table:

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

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

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 |
+----+-------+

那就更好了

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

如果您进入 Dataproc 集群中的 Spark SQL 控制台(通过 SSH 在主节点中输入 spark-sql),您将看到 SELECT查询不包括table姓名:

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.