我正在和一个朋友学习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 之外还有哪些其他方法?
有人可以给一些建议吗?
欢迎来到SO,你的朋友是对的,spark api 是 Dataframe(行上的数据集)。 使用 createOrReplaceTempView 可以启用 sql 接口,但(只有少数例外)sql 会被解析为与使用 api 相同的表达式树和查询计划。
为了能够仅使用 sql,您必须通过使用 EXTERNAL 和 LOCATION create table 在 adls 上将该数据集注册为外部表(并确保 databricks 可以访问它等)。
查看 Azure Databricks 中的此页面。在 SQL 区域中,当翻译到您的链接时,您会看到以下示例:
SELECT * FROM json.`abfss://[email protected]/raw_files/`
如果您更喜欢使用 SQL,我认为这对于您的情况来说是一个不错的选择。