SparkSQL 如何在 FROM 语句上加载带标题的 csv

恵砂川*_*恵砂川 4 sql scala apache-spark apache-spark-sql

Spark SQL FROM语句可以指定文件路径和格式。
但是,加载 csv 时标题被忽略。
可以使用标题作为列名吗?

~ > cat test.csv
a,b,c
1,2,3
4,5,6
Run Code Online (Sandbox Code Playgroud)
~ > cat test.csv
a,b,c
1,2,3
4,5,6
Run Code Online (Sandbox Code Playgroud)

我想要。

+---+---+---+
|  a|  b|  c|
+---+---+---+
|  1|  2|  3|
|  4|  5|  6|
+---+---+---+
Run Code Online (Sandbox Code Playgroud)

use*_*362 12

如果你想用普通的 SQL 来完成它,你应该首先创建一个表或视图:

CREATE TEMPORARY VIEW foo
USING csv 
OPTIONS (
  path 'test.csv',
  header true
);
Run Code Online (Sandbox Code Playgroud)

然后从中SELECT得出:

SELECT * FROM foo;
Run Code Online (Sandbox Code Playgroud)

要使用此方法,请SparkSession.sql删除尾随;并单独执行每个语句。


oll*_*ik1 5

我认为 Spark 2.4.3 中没有提供纯 SQL 解决方案,这是撰写本文时的最新版本。此语法使用规则进行解析,ResolveSQLOnFile该规则始终使用空选项映射DataSource调用构造函数。

我可以验证在构造函数中设置断点DataSource并修改optionstoMap("header" -> "true")可以达到目的,因此显然这就是应该实现的地方。

在此输入图像描述

在此输入图像描述