栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在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到数据框或列都可能有效。虽然效率是…

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/659558.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号