【问题标题】:How to get transpose of dynamic dataset for below sample input using Spark and Java如何使用 Spark 和 Java 为以下示例输入获取动态数据集的转置
【发布时间】:2026-01-09 01:20:02
【问题描述】:

我有一个数据集,我想始终使用 Spark 和 Java 将列(动态列数)转换为两行。

示例输入:

+-------+-------+---------+
|titanic|IronMan|Juglebook|
+-------+-------+---------+
|    101|  test1|       10|
|    102|  test2|       20|
|    103|  test3|       30|
+-------+-------+---------+

样本输出:

|    Colname|colvalue       
+---------+----+----+---------+     
|   titanic| 101,102,103      |     
|  IronMan | test1,test2,test3|     
|Juglebook |  10,20,30        |     
+-------+-------+-------------+

我尝试使用 spark sql,但它变得硬编码。

【问题讨论】:

    标签: java apache-spark transpose


    【解决方案1】:

    考虑到您将列转换为行的请求,您可能面临的一个问题是您的值需要在字符串中,而不是在 Int 中。首先,您需要将所有值转换为字符串。假设这部分在这里完成,你可以如何使用 struct 来获得你想要的东西

    下面是它的Scala实现

     Import org.apache.spark.sql.funtions._
    def transpose(transDF:DataFrame) :DataFrame ={
    cols1= transDF.dtypes.unzip
    cols2= cols1._1
    val KVS = explode(
    array(cols2.map(c =>struct(lit(c).alias("column_name"), col(c).alias("column_Value"))
    ):_*))
    transDF.Select(kvs.alias("_kvs"))
    }
    

    您可以从 main 调用该函数,这将返回转置的列。然后,您可以使用 groupBy 和 Agg 来获取所需格式的数据。

    【讨论】:

    • 请接受它,以便其他人可以从中受益。
    • @DeepakSharma:你熟悉如何在这里“接受”答案吗?
    最近更新 更多