-1

我在 Databricks/Spark 社区版中使用 SQL 笔记本

%python
education_DF = sqlContext.sql('select * from global_temp.population_Globaltmp_view where `Education` = "2YD"')
display(education_DF)

上面的代码单元工作正常并从视图中检索所需的行。但是,以下代码单元格给出了错误。

我将 WHERE 子句中的硬编码值“2YD”替换为包含相同值的变量调用education_choice 。

看来我没有在 SQL 中正确使用变量。我将如何进行这项工作?

%python
education_DF = sqlContext.sql('select * from global_temp.population_Globaltmp_view where `Education` = education_choice')
display(education_DF)

(这是错误)

org.apache.spark.sql.AnalysisException: cannot resolve '`education_choice`' given input columns: [global_temp.population_globaltmp_view.Salary, global_temp.population_globaltmp_view.Address, global_temp.population_globaltmp_view.Race, global_temp.population_globaltmp_view.MiddleI, global_temp.population_globaltmp_view.Education, global_temp.population_globaltmp_view.HairColor, global_temp.population_globaltmp_view.Age, global_temp.population_globaltmp_view.FullName, global_temp.population_globaltmp_view.City, global_temp.population_globaltmp_view.FirstName, global_temp.population_globaltmp_view.State, global_temp.population_globaltmp_view.LastName, global_temp.population_globaltmp_view.Height, global_temp.population_globaltmp_view.Fertility, global_temp.population_globaltmp_view.Employment, global_temp.population_globaltmp_view.Zip, global_temp.population_globaltmp_view.Weight, global_temp.population_globaltmp_view.Gender]; line 1 pos 72;

我尝试了建议的注入方法,但这次得到了一个稍微不同的错误。我包括了相关代码单元的屏幕截图。似乎education_choice“2YD”没有被识别为文字,而是一个字段或类似的东西。

2YD 不应该像“2YD”那样在其周围加上引号吗?

如果我像这样硬编码 WHERE 子句: WHERE Education = "2YD" 查询工作正常。

下面的图片很小,但如果你右键单击它并“在新的水龙头中打开”,它的可读性很强。

在此处输入图像描述

4

1 回答 1

0

*编辑

您将变量education_choice 用作硬编码字符串。相反,您应该像这样在 SQL 表达式字符串中注入education_choice 的值。

*edit - 用引号包裹变量。

%python
education_DF = sqlContext.sql('select * from global_temp.population_Globaltmp_view where `Education` = "{}"'.format(education_choice))
display(education_DF)
于 2021-06-27T16:51:05.470 回答