如何使用 Spark 和 Java 为以下示例输入获取动态数据集的转置



>我有一个数据集,我想始终使用 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,但它正在变得硬编码。

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

下面是它的 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来获取所需格式的数据。

最新更新