首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Spark和Java获得以下样本输入的动态数据集转置

如何使用Spark和Java获得以下样本输入的动态数据集转置
EN

Stack Overflow用户
提问于 2019-04-11 16:37:23
回答 1查看 182关注 0票数 -1

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

示例输入:

代码语言:javascript
复制
+-------+-------+---------+
|titanic|IronMan|Juglebook|
+-------+-------+---------+
|    101|  test1|       10|
|    102|  test2|       20|
|    103|  test3|       30|
+-------+-------+---------+

示例输出:

代码语言:javascript
复制
|    Colname|colvalue       
+---------+----+----+---------+     
|   titanic| 101,102,103      |     
|  IronMan | test1,test2,test3|     
|Juglebook |  10,20,30        |     
+-------+-------+-------------+

我尝试过使用spark sql,但它已经变成了硬编码。

EN

回答 1

Stack Overflow用户

发布于 2019-04-12 06:54:35

考虑到您将列转置为行的请求,您可能会遇到的一个问题是,您的值需要是string格式,而不是Int格式。首先,您需要将所有值转换为string。假设这一部分已经完成,这里就是你如何转移和使用struct来得到你想要的东西的方法

下面是它的Scala实现

代码语言:javascript
复制
 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来获取所需格式的数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55628129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档