如何使用小部件在Dataframe SELECT语句中传递动态列名 [英] How to use widgets to pass dynamic column names in Dataframe select statement
本文介绍了如何使用小部件在Dataframe SELECT语句中传递动态列名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个Dataframe,我希望在我的Databricks Notebook中通过SELECT语句中的小部件动态传递列名。我该怎么做?
我使用的是以下代码
df1 = spark.sql("select * from tableraw")
WHEREdf1
具有列";表名称";和";层";
df = df1.select("tablename", "layer")
现在,我们的要求是使用小部件的值来选择这些列,类似于:
df = df1.select(dbutils.widget.get("tablename"), dbutils.widget.get("datalayer"))
推荐答案
派生/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")
使用值选择列
%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
与Python/Scala相比,SQL中的小部件的工作方式略有不同,因为您不能使用它们来选择列。但是,可以使用小部件动态调整筛选器。
创建小工具
%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 SELECT语句中传递动态列名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文