我正在尝试在查询中使用查询参数创建仪表板,以添加动态列名。这是查询
SELECT :column_names FROM table1
查询的解析看起来像这样:
array(col1, col2, col3)
["col1","col2","col3"]
我尝试爆炸阵列
table1
选择爆炸(:column_names)恢复:
col
col1
col2
col3
我想创建一个像
SELECT col1, col2, col3 FROM table1
以及从表中的实际记录回报。 有可能做吗?
我尝试了以下方法:
from pyspark.sql import SparkSession
from pyspark.sql.functions import col
spark = SparkSession.builder.appName("DynamicColumns").getOrCreate()
data = [(1, "a", "x"), (2, "b", "y"), (3, "c", "z")]
columns = ["col1", "col2", "col3"]
df = spark.createDataFrame(data, columns)
column_names = ["col1", "col2", "col3"]
selected_columns = [col(column) for column in column_names]
result_df = df.select(*selected_columns)
result_df.show()
+----+----+----+
|col1|col2|col3|
+----+----+----+
| 1| a| x|
| 2| b| y|
| 3| c| z|
+----+----+----+
在上面的代码中,我定义了要动态选择的列名列表。
通过使用列表理解来为每个列名创建col()
函数列表,我可以动态地从数据框架中选择所需的列。
接下来,通过使用
*
运算符将选定列的列表传递到
select()
函数,可以生成一个查询,从数据框架中选择指定的列。