如何仅使用Spark SQL读取dbfs中的csv文件?

问题描述 投票:0回答:1

我正在开发databricks交互式集群,我想使用SQL查询存储在ADLS或DBFS中的csv文件。

问题:

我可以轻松地对增量表和镶木地板文件执行此操作。但是,当我对具有特定分隔符的 csv 执行此操作时,我会将所有列加载为一列。

%sql SELECT *
from delta.`dbfs:/path/to/delta/table`

^^ 正确显示输出

%sql SELECT *
from csv.`dbfs:/path/to/file.csv`

^^ 将输出显示为一列,不带标题。基本上它需要传递一些选项来指定 sep 和 headers

潜在的解决方案:

我可以轻松地在 Spark 中执行此操作,

spark.read.csv("dbfs:/path/to/file.csv", header=True, sep="|")
但是如何在 Spark SQL 中执行此操作(魔术命令)?

我可以创建一个指定选项的表格

%sql CREATE TABLE schema.table
USING CSV
OPTIONS (path "dbfs:/path/to/file.csv", header "true", delimiter "|")

然后我就可以查询数据了。

但是有没有办法只选择 * csv 数据而不创建这些中间表?

apache-spark-sql databricks azure-databricks databricks-sql
1个回答
0
投票

Databricks 不支持不使用

spark.read
直接对 CSV 文件执行 SQL 查询。

要使用 Databricks SQL 访问存储在 DBFS(Databricks 文件系统)中的文件,首先需要创建引用该文件的表或视图。 此过程涉及将数据从 CSV 文件复制到表或视图中。创建表或视图后,您可以查询它以从文件中检索数据。

我已经尝试过你的方法,我可以使用标题从 CSV 中读取数据

OPTIONS (header "true", delimiter ",")

但是我收到错误 %sql 选择 * 来自 csv。

dbfs:/FileStore/tables/sample.csv

_c0 _c1 _c2
Name    Age Country
Emma    28  Australia
Name    Age Country
Alice   30  Canada
Name    Age Country
Michael 35  UK
Name    Age Country
John    25  USA

我尝试过以下方法

%sql
CREATE OR REPLACE  TEMPORARY VIEW  sample_view
USING csv
OPTIONS (path  "dbfs:/FileStore/tables/sample.csv", header "true", inferSchema "true", delimiter ",")

结果:

Name    Age Country
Emma    28  Australia
Alice   30  Canada
Michaeference:el    35  UK
John    25  USA

参考: Databricks - 从文件夹中读取 CSV 文件

© www.soinside.com 2019 - 2024. All rights reserved.