在Apache Spark 1.3中将列追加到数据帧

在Apache Spark 1.3中将列追加到数据帧,第1张

在Apache Spark 1.3中将列追加数据

自从我发布问题以来已经有一段时间了,似乎还有其他人也希望得到答案。以下是我发现的内容。

因此,最初的任务是将带有行标识符的列(基本上是一个sequence 1 to numRows)追加到任何给定的数据帧,以便可以跟踪行的顺序/状态(例如,在采样时)。这可以通过以下方式实现:

sqlContext.textFile(file).zipWithIndex().map(case(d, i)=>i.toString + delimiter + d).map(_.split(delimiter)).map(s=>Row.fromSeq(s.toSeq))

关于将任何列追加到任何数据帧的一般情况:

Spark API中withColumn与此功能“最接近”的是和withColumnRenamed。根据Scala的文档,前者通过添加列来返回新的Dataframe。我认为这是一个有点混乱和不完整的定义。这两个函数只能在this数据帧上运行,即给定两个数据帧,df1并且df2具有column col:

val df = df1.withColumn("newCol", df1("col") + 1) // -- OKval df = df1.withColumn("newCol", df2("col") + 1) // -- FAIL

因此,除非您可以设法将现有数据框中的列转换为所需的形状,withColumn否则您将无法使用或withColumnRenamed添加任意列(独立或其他数据框)。

如上文所述,解决方法可能是使用join-尽管可能,但会很混乱-将上述唯一键附加zipWithIndex到数据框或列都可能有效。虽然效率是…

显然,对于分布式环境而言,将一列添加到数据框并不是一件容易的功能,并且根本不可能有非常有效,整洁的方法。但是我认为,即使有性能警告,也要提供此核心功能仍然非常重要。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5661625.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存