Sql 在spark中将行转换为列

Sql 在spark中将行转换为列,sql,apache-spark,hive,apache-spark-sql,Sql,Apache Spark,Hive,Apache Spark Sql,我的日期如下:-我必须按列显示年\月日期。我应该如何使用这个,我是新的火花 scala> spark.sql("""select sum(actual_calls_count),year_month from ph_com_b_gbl_dice.dm_rep_customer_call group by year_month""") res0: org.apache.spark.sql.DataFrame = [sum(actual_calls_count): bigint, year_m

我的日期如下:-我必须按列显示
年\月
日期。我应该如何使用这个,我是新的火花

scala> spark.sql("""select sum(actual_calls_count),year_month from ph_com_b_gbl_dice.dm_rep_customer_call group by year_month""")
res0: org.apache.spark.sql.DataFrame = [sum(actual_calls_count): bigint, year_month: string]

scala> res0.show
+-----------------------+----------+
|sum(actual_calls_count)|year_month|
+-----------------------+----------+
|                      1|   2019-10|
|                   3693|   2018-10|
|                      7|   2019-11|
|                     32|   2017-10|
|                     94|   2019-03|
|                  10527|   2018-06|
|                   4774|   2017-05|
|                   1279|   2017-11|
|                 331982|   2018-03|
|                 315767|   2018-02|
|                   7097|   2017-03|
|                      8|   2017-08|
|                      3|   2019-07|
|                   3136|   2017-06|
|                   6088|   2017-02|
|                   6344|   2017-04|
|                 223426|   2018-05|
|                   9819|   2018-08|
|                      1|   2017-07|
|                     68|   2019-05|
+-----------------------+----------+
only showing top 20 rows
我的输出应该是这样的:-

sum(actual_calls_count)|year_month1 | year_month2 | year_month3 and so on..

如果您提供预期的数据输出,这将很容易。您可以使用pivot on spark DataFrame我尝试使用以下代码:-这与您的类似吗?val a=spark.sql(“选择sum(实际调用次数)作为实际调用次数,调用组合层,从ph_com的年/月调用组合层。dm_rep_customer按年/月调用组,调用组合层”)val pivotDF=a.groupBy(“call\u portfolio\u tier”).pivot(“year\u month”).sum(“实际调用数”)pivotDF.show()我不理解您使用这个-.agg(concat\u ws(“”),col\u list(col(“sum”))的逻辑。drop(“1”)@SanskarSuman大多数逻辑都是一样的,只需对val pivotDF=a.groupBy(“call_portfolio_tier”).pivot(“year_month”).agg(sum(“actual_calls_count”)@SanskarSuman我使用过agg(concat_ws(“),collect_list(col(“sum”)))。drop(“1”),实际上我正在做的是插入一列,其值为常量“1”这样我就可以按完整的数据帧进行分组。在该分组中,我使用collect_list收集所有相应的和,collect_list返回字符列表,我使用concat_ws()将其转换为字符串,最后删除新添加的列
scala> df.groupBy(lit(1)).pivot(col("year_month")).agg(concat_ws("",collect_list(col("sum")))).drop("1").show(false)
+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
|2017-02|2017-03|2017-04|2017-05|2017-06|2017-07|2017-08|2017-10|2017-11|2018-02|2018-03|2018-05|2018-06|2018-08|2018-10|2019-03|2019-05|2019-07|2019-10|2019-11|
+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
|6088   |7097   |6344   |4774   |3136   |1      |8      |32     |1279   |315767 |331982 |223426 |10527  |9819   |3693   |94     |68     |3      |1      |7      |
+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+