Arrays 从Spark Scala中的数据帧创建动态查询

Arrays 从Spark Scala中的数据帧创建动态查询,arrays,scala,apache-spark,apache-spark-sql,switch-statement,Arrays,Scala,Apache Spark,Apache Spark Sql,Switch Statement,我有一个数据帧DF,如下所示。我想基于Issue列和Datatype列创建一个动态查询。 如果Issue列为YES则检查数据类型,如果其StringType将Trim(DiffColumnName)添加到查询中,或者如果数据类型为integer,则执行一些其他操作,如舍入(计数,2) 对于问题类型为否的列,不执行任何操作并选择列本身 查询应该是这样的 Select DEST_COUNTRY_NAME, trim(ORIGIN_COUNTRY_NAME),round(COUNT,2) +-----

我有一个数据帧DF,如下所示。我想基于Issue列和Datatype列创建一个动态查询。 如果Issue列为YES则检查数据类型,如果其StringTypeTrim(DiffColumnName)添加到查询中,或者如果数据类型为integer,则执行一些其他操作,如舍入(计数,2) 对于问题类型为否的列,不执行任何操作并选择列本身

查询应该是这样的

Select DEST_COUNTRY_NAME, trim(ORIGIN_COUNTRY_NAME),round(COUNT,2)
+-------------------+-----------+-----+
|     DiffColumnName|   Datatype|Issue|
+-------------------+-----------+-----+
|  DEST_COUNTRY_NAME| StringType|   NO|
|ORIGIN_COUNTRY_NAME| StringType|  YES|
|              COUNT|IntegerType|  YES|
+-------------------+-----------+-----+
我不确定我是否应该在这里使用if-else条件或case语句或创建一个UDF。此外,我的数据帧(即列)是动态的,每次都会更改


需要一些建议如何在这里继续。谢谢

这可以使用以下代码来完成

  • 通过应用所需的操作派生新列
  • 使用collect_list将值聚合到数组中
  • 使用concat_ws和concat格式化输出
我在测试数据中添加了一列,它为我提供了所需的输出

+-------------------------------------------------------------------------+
|concat(select , concat_ws(,, queryout))                                  |
+-------------------------------------------------------------------------+
|select DEST_COUNTRY_NAME,trim(ORIGIN_COUNTRY_NAME),round(COUNT,2),TESTCOL|
+-------------------------------------------------------------------------+
+-------------------------------------------------------------------------+
|concat(select , concat_ws(,, queryout))                                  |
+-------------------------------------------------------------------------+
|select DEST_COUNTRY_NAME,trim(ORIGIN_COUNTRY_NAME),round(COUNT,2),TESTCOL|
+-------------------------------------------------------------------------+