如何使用小部件在 Dataframe select 语句中传递动态列名
How to use widgets to pass dynamic column names in Dataframe select statement
我有一个 Dataframe,我想在我的 Databricks Notebook 的 select 语句中通过小部件动态传递列名。我该怎么做?
我正在使用下面的代码
df1 = spark.sql("select * from tableraw")
其中 df1
有列“tablename”和“layer”
df = df1.select("tablename", "layer")
现在,我们的要求是将小部件的值用于 select 这些列,例如:
df = df1.select(dbutils.widget.get("tablename"), dbutils.widget.get("datalayer"))
Python / Scala
创建小部件
%python
dbutils.widgets.text(name = "pythonTextWidget", defaultValue = "columnName")
dbutils.widgets.dropdown(name = "pythonDropdownWidget", defaultValue = "col1", choices = ["col1", "col2", "col3"])
%scala
dbutils.widgets.text("scalaTextWidget", "columnName")
dbutils.widgets.dropdown("scalaDropdownWidget", "col1", Seq("col1", "col2", "col3"))
从小部件中提取价值
%python
textColumn = dbutils.widgets.get("pythonTextWidget")
dropdownColumn = dbutils.widgets.get("pythonDropdownWidget")
%scala
val textColumn = dbutils.widgets.get("scalaTextWidget")
val dropdownColumn = dbutils.widgets.get("scalaDropdownWidget")
将值用于 select 列
%python
from pyspark.sql.functions import col
df.select(col(textColumn), col(dropdownColumn))
%scala
import org.apache.spark.sql.functions.col
df.select(col(textColumn), col(dropdownColumn))
SQL
SQL 中的小部件与 Python/Scala 中的小部件的工作方式略有不同,因为您不能将它们用于 select 列。但是,小部件可用于动态调整过滤器。
创建小部件
%sql CREATE WIDGET text sqlTextWidget DEFAULT "ACTIVE"
%sql CREATE WIDGET DROPDOWN sqlDropdownWidget DEFAULT "ACTIVE" CHOICES SELECT DISTINCT Status FROM <databaseName>.<tableName> WHERE Status IS NOT NULL
将小部件值应用于过滤器语句
%sql SELECT * FROM <databaseName>.<tableName> WHERE Status = getArgument("sqlTextWidget")
可以在 Widgets 上的 Databricks 文档中找到更多背景信息。
我有一个 Dataframe,我想在我的 Databricks Notebook 的 select 语句中通过小部件动态传递列名。我该怎么做?
我正在使用下面的代码
df1 = spark.sql("select * from tableraw")
其中 df1
有列“tablename”和“layer”
df = df1.select("tablename", "layer")
现在,我们的要求是将小部件的值用于 select 这些列,例如:
df = df1.select(dbutils.widget.get("tablename"), dbutils.widget.get("datalayer"))
Python / Scala
创建小部件
%python
dbutils.widgets.text(name = "pythonTextWidget", defaultValue = "columnName")
dbutils.widgets.dropdown(name = "pythonDropdownWidget", defaultValue = "col1", choices = ["col1", "col2", "col3"])
%scala
dbutils.widgets.text("scalaTextWidget", "columnName")
dbutils.widgets.dropdown("scalaDropdownWidget", "col1", Seq("col1", "col2", "col3"))
从小部件中提取价值
%python
textColumn = dbutils.widgets.get("pythonTextWidget")
dropdownColumn = dbutils.widgets.get("pythonDropdownWidget")
%scala
val textColumn = dbutils.widgets.get("scalaTextWidget")
val dropdownColumn = dbutils.widgets.get("scalaDropdownWidget")
将值用于 select 列
%python
from pyspark.sql.functions import col
df.select(col(textColumn), col(dropdownColumn))
%scala
import org.apache.spark.sql.functions.col
df.select(col(textColumn), col(dropdownColumn))
SQL
SQL 中的小部件与 Python/Scala 中的小部件的工作方式略有不同,因为您不能将它们用于 select 列。但是,小部件可用于动态调整过滤器。
创建小部件
%sql CREATE WIDGET text sqlTextWidget DEFAULT "ACTIVE"
%sql CREATE WIDGET DROPDOWN sqlDropdownWidget DEFAULT "ACTIVE" CHOICES SELECT DISTINCT Status FROM <databaseName>.<tableName> WHERE Status IS NOT NULL
将小部件值应用于过滤器语句
%sql SELECT * FROM <databaseName>.<tableName> WHERE Status = getArgument("sqlTextWidget")
可以在 Widgets 上的 Databricks 文档中找到更多背景信息。