将列添加到 RDD Spark 1.2.1

Posted

技术标签:

【中文标题】将列添加到 RDD Spark 1.2.1【英文标题】:Add column to RDD Spark 1.2.1 【发布时间】:2016-05-23 19:07:55 【问题描述】:

我正在尝试使用 this question answers 将我的 RDD 表扩展一列(带有字符串值),但我无法以这种方式添加列名...我正在使用 Scala。

有没有什么简单的方法可以向 RDD 添加一列?

【问题讨论】:

检查此链接上的信息是否有帮助:***.com/questions/29622867/… 你能告诉我们一些你正在尝试使用的代码吗? 【参考方案1】:

Apache Spark 有一个函数式的方法来细化数据。从根本上说,RDD[T] 是某种对象集合(RDD 代表弹性分布式数据结构)。

按照函数式方法,您使用转换详细说明RDD 中的对象。转换从前一个 RDD 构造一个新的 RDD

转换的一个例子是map 方法。使用map,您可以将RDD 的每个对象转换为您需要的所有其他类型的对象。因此,如果您有一个表示 的数据结构,则可以将该结构转换为新的结构并添加一行。

以下面这段代码为例。

val rdd: (String, String) = sc.pallelize(List(("Hello", "World"), ("Such", "Wow"))
// This new RDD will have one more "column",  
// which is the concatenation of the previous
val rddWithOneMoreColumn = 
  rdd.map 
    case(a, b) => 
      (a, b, a + b)

在此示例中,Tuple2RDD(又名一对)转换为 Tuple3RDD,只需将函数应用于每个 RDD 元素。

显然,您必须对对象 rddWithOneMoreColumn 应用一个操作才能进行计算。事实上,Apache Spark 会延迟计算所有转换的结果。

【讨论】:

但是如果我在原始 RDD 中的数据是 Cassandra 表中的行呢? 您从 Cassandra 中提取的对象是哪种类型? "但是如果我在原始 RDD 中的数据是来自 Cassandra 表的行怎么办?"然后你必须告诉我们,因为我们大多数人都没有心灵感应。 @Rada:那么你仍然需要对行对象使用某种转换,或者你可以在 DataFrames 上使用 withColumn 方法。

以上是关于将列添加到 RDD Spark 1.2.1的主要内容,如果未能解决你的问题,请参考以下文章

如何将列转换为向量类型?

在 Spark 中合并 Row()

修改 Spark RDD foreach 中的集合

如何将 Spark/Scala RDD 合并/加入到 List 中,以便 RDD 中的每个值与每个 List 项一起获得一个新行

Spark RDD案例:计算总成绩

使用 spark scala 向空数据框添加一行