动态传递用于在 PySpark Dataframe 方法 selectExpr() 中选择列的查询字符串
Dynamically passing Query String for selecting columns in PySpark Dataframe method selectExpr()
我正在如下动态生成查询字符串并将其传递给 selectExpr()。
queryString=''''category_id as cat_id','category_department_id as cat_dpt_id','category_name as cat_name''''
df.selectExpr(queryString)
根据文件
selectExpr(*expr) :
投影一组 SQL 表达式和 returns 一个新的 DataFrame。
这是接受 SQL 表达式的 select() 的变体。
问题是变量 "queryString" 被视为单个字符串而不是三个单独的列(这是正确的)。 以下是错误:
: org.apache.spark.sql.catalyst.parser.ParseException:
.........
== SQL ==
'category_id as cat_id', 'category_department_id as cat_dpt_id', 'category_name as cat_name'
------------------------^^^
有什么方法可以将动态生成的 "queryString" 作为 selectExpr() 的参数传递。
如果可能,在生成查询字符串时,尝试立即将各个列表达式放在一个列表中,而不是将它们连接成一个字符串。
如果不可能,您可以将查询字符串拆分为单独的列表达式,这些表达式可以传递给 selectExpr
。
# generate some dummy data
data= pd.DataFrame(np.random.randint(0, 5, size=(5, 3)), columns=list("abc"))
df = spark.createDataFrame(data)
df.show()
+---+---+---+
| a| b| c|
+---+---+---+
| 1| 1| 4|
| 1| 2| 1|
| 3| 3| 2|
| 3| 2| 2|
| 2| 0| 2|
+---+---+---+
# create example query string
query_string="'a as aa','b as bb','c as cc'"
# split and pass
column_expr = query_string.replace("'", "").split(",")
df.selectExpr(column_expr).show()
+---+---+---+
| aa| bb| cc|
+---+---+---+
| 1| 1| 4|
| 1| 2| 1|
| 3| 3| 2|
| 3| 2| 2|
| 2| 0| 2|
+---+---+---+
我正在如下动态生成查询字符串并将其传递给 selectExpr()。
queryString=''''category_id as cat_id','category_department_id as cat_dpt_id','category_name as cat_name''''
df.selectExpr(queryString)
根据文件
selectExpr(*expr) : 投影一组 SQL 表达式和 returns 一个新的 DataFrame。 这是接受 SQL 表达式的 select() 的变体。
问题是变量 "queryString" 被视为单个字符串而不是三个单独的列(这是正确的)。 以下是错误:
: org.apache.spark.sql.catalyst.parser.ParseException: .........
== SQL ==
'category_id as cat_id', 'category_department_id as cat_dpt_id', 'category_name as cat_name'
------------------------^^^
有什么方法可以将动态生成的 "queryString" 作为 selectExpr() 的参数传递。
如果可能,在生成查询字符串时,尝试立即将各个列表达式放在一个列表中,而不是将它们连接成一个字符串。
如果不可能,您可以将查询字符串拆分为单独的列表达式,这些表达式可以传递给 selectExpr
。
# generate some dummy data
data= pd.DataFrame(np.random.randint(0, 5, size=(5, 3)), columns=list("abc"))
df = spark.createDataFrame(data)
df.show()
+---+---+---+
| a| b| c|
+---+---+---+
| 1| 1| 4|
| 1| 2| 1|
| 3| 3| 2|
| 3| 2| 2|
| 2| 0| 2|
+---+---+---+
# create example query string
query_string="'a as aa','b as bb','c as cc'"
# split and pass
column_expr = query_string.replace("'", "").split(",")
df.selectExpr(column_expr).show()
+---+---+---+
| aa| bb| cc|
+---+---+---+
| 1| 1| 4|
| 1| 2| 1|
| 3| 3| 2|
| 3| 2| 2|
| 2| 0| 2|
+---+---+---+