首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Iterable[String,String,String]转换为DataFrame?

如何将Iterable[String,String,String]转换为DataFrame?
EN

Stack Overflow用户
提问于 2017-09-19 05:07:35
回答 1查看 1.4K关注 0票数 3

我有一个大约6GB的(String, String, String)数据集。在解析数据集之后,我使用(element => element._2)执行了(element => element._2),并获得了RDD[(String, Iterable[String, String, String])]。然后,foreach元素在groupby中,我正在执行toList,以便将其转换为DataFrame

代码语言:javascript
复制
val dataFrame = groupbyElement._2.toList.toDF()

但是,将数据保存为拼花文件格式需要花费大量的时间。我能用什么有效的方法吗?注:我有五个节点集群。每个节点有28 GB RAM和4核。我正在使用独立模式,并给予每个执行器16 GB内存。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-19 05:49:56

您可以尝试使用dataframe/dataset方法而不是用于RDD的方法。它可以是这样的:

代码语言:javascript
复制
val spark = SparkSession.builder.getOrCreate()
import spark.implicits._

val df = Seq(
  ("ABC", "123", "a"),
  ("ABC", "321", "b"),
  ("BCA", "123", "c")).toDF("Col1", "Col2", "Col3")
scala> df.show
+----+----+----+
|Col1|Col2|Col3|
+----+----+----+
| ABC| 123|   a|
| ABC| 321|   b|
| BCA| 123|   c|
+----+----+----+

val df2 = df
  .groupBy($"Col2")
  .agg(
    collect_list($"Col1") as "Col1_list"), 
    collect_list($"Col3") as "Col3_list"))
scala> df2.show
+----+----------+---------+
|Col2| Col1_list|Col3_list|
+----+----------+---------+
| 123|[ABC, BCA]|   [a, c]|
| 321|     [ABC]|      [b]|
+----+----------+---------+

此外,您可以使用这些方法直接获取数据,而不是将数据读入RDD中。

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

https://stackoverflow.com/questions/46292227

复制
相关文章

相似问题

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