为什么我需要使用数据框来处理数据块中的查询? (pyspark、sparksql)

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

我正在和一个朋友学习databricks,有一件事我真的不明白。

我正在尝试在azure中存储帐户中的json文件中使用pyspark和spark sql进行查询。

azure中文件的路径是这样的:'abfss://[email protected]/raw_files/'

在 databricks 中,我创建了以下语句来创建数据框:

df = spark.read.format("json").load("abfss://[email protected]/raw_files/")

好吧,但是:

知道我已经创建了一个数据框,为什么我无法使用 pyspark 或 Spark sql 查询它?

如果我使用这个说法,只是为了举例说明:

SELECT * FROM df

这不会起作用。

但是,当我这样做时,它会:

df = spark.read.format("json").load("abfss://[email protected]/raw_files/")
df.createOrReplaceTempView('df_view')**
SELECT * FROM df_view**;

他说出现这种情况是因为pyspark和spark sql是API(我的疑问就在这里)。

为什么会发生这种情况?除了 createOrReplaceTempView 之外还有哪些其他方法?

有人可以给一些建议吗?

apache-spark pyspark apache-spark-sql databricks
2个回答
0
投票

欢迎来到SO,你的朋友是对的,spark api Dataframe(行上的数据集)。 使用 createOrReplaceTempView 可以启用 sql 接口,但(只有少数例外)sql 会被解析为与使用 api 相同的表达式树和查询计划。

为了能够仅使用 sql,您必须通过使用 EXTERNAL 和 LOCATION create table 在 adls 上将该数据集注册为外部表(并确保 databricks 可以访问它等)。


0
投票

查看 Azure Databricks 中的此页面。在 SQL 区域中,当翻译到您的链接时,您会看到以下示例:

SELECT * FROM json.`abfss://[email protected]/raw_files/`

如果您更喜欢使用 SQL,我认为这对于您的情况来说是一个不错的选择。

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