Apache Spark:迭代数据帧行并通过 MutableList (Scala) 创建新数据帧
Posted
技术标签:
【中文标题】Apache Spark:迭代数据帧行并通过 MutableList (Scala) 创建新数据帧【英文标题】:Apache Spark: Iterate rows of dataframe and create new dataframe through MutableList (Scala) 【发布时间】:2019-02-27 12:56:30 【问题描述】:我目前正在尝试学习在 Scala 中使用 Apache Spark。
我有下表作为我想用于分析的数据框
现在我想遍历行,获取正文列中字符串的 id 和字数,并在 2 列的数据框中输出信息。
def analyseDF(df:DataFrame): Unit =
//var retFrame = spark.emptyDataset[ClassIdCount].toDF()
var tList = mutable.MutableList[IdCount]()
df.foreach(row =>
val wordCnt = row.getString(5).split(" ").size
val mailid = row.getString(0)
val record = IdCount(mailid.toString(), wordCnt.toInt)
tList += record
println(tList)
println(record)
)
tList.toDF().show()
// tList.toDS().show()
不知何故,在调用 tList.toDF().show() 时,具有 2 列的框架始终为空,但循环中的记录生成正确。任何人都可以在这里给我一个提示吗?
【问题讨论】:
【参考方案1】:典型的初学者错误:tList
仅存在于驱动程序中,无法从执行程序端代码更新。这不是从现有数据框创建数据框的方式。请改用转换/聚合。
在您的情况下,您可以使用内置 Dataframe API 函数 split
和 size
:
import org.apache.spark.sql.functions._
val transformedDf = df
.select(
$"id",
size(split($"body"," "))).as("cnt")
)
【讨论】:
以上是关于Apache Spark:迭代数据帧行并通过 MutableList (Scala) 创建新数据帧的主要内容,如果未能解决你的问题,请参考以下文章
基于其他列(即应用 CDC)将多个 spark 数据帧行组合成一个
如何将 Content-Type: application/x-www-form-urlencoded 格式的数据帧行迭代到 API POST 请求中?