gpt4 book ai didi

python - 在 map 中创建 Spark Row

转载 作者:行者123 更新时间:2023-11-28 17:27:42 27 4
gpt4 key购买 nike

我在 https://databricks.com/blog/2015/02/17/introducing-dataframes-in-spark-for-large-scale-data-science.html 看到了 Dataframes 教程这是用 Python 编写的。我正在尝试将其翻译成 Scala。

他们有以下代码:

df = context.load("/path/to/people.json")
# RDD-style methods such as map, flatMap are available on DataFrames
# Split the bio text into multiple words.
words = df.select("bio").flatMap(lambda row: row.bio.split(" "))
# Create a new DataFrame to count the number of words
words_df = words.map(lambda w: Row(word=w, cnt=1)).toDF()
word_counts = words_df.groupBy("word").sum()

因此,我首先将数据从 csv 读取到数据帧 df 中,然后我有:

val title_words = df.select("title").flatMap { row =>    
row.getAs[String("title").split(" ") }
val title_words_df = title_words.map( w => Row(w,1) ).toDF()
val word_counts = title_words_df.groupBy("word").sum()

但我不知道:

  1. 如何将字段名称分配给以 val title_words_df = ... 开头的行

  2. 我遇到错误“值 toDF 不是 org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] 的成员”

在此先感谢您的帮助。

最佳答案

how to assign the field names to the rows

Python Row 是一种与其 Scala 对应物完全不同的对象类型。它是一个用名称扩充的元组,这使得它比无类型集合更等同于产品类型 (o.a.s.sql.Row)。

I am having the error "The value toDF is not a member of org.apache.spark.rdd.RDD[org.apache.spark.sql.Row]"

由于 o.a.s.sql.Row 基本上是无类型的,因此它不能与 toDF 一起使用,并且需要具有显式模式的 createDataFrame

import org.apache.spark.sql.types._

val schema = StructType(Seq(
StructField("word", StringType), StructField("cnt", LongType)
))

sqlContext.createDataFrame(title_words.map(w => Row(w, 1L)), schema)

如果您希望您的代码等同于 Python 版本,您应该使用产品类型而不是 Row。这意味着 Tuple:

title_words.map((_, 1L)).toDF("word", "cnt")

或案例类:

case class Record(word: String, cnt: Long)

title_words.map(Record(_, 1L)).toDF

但实际上,应该不需要使用 RDD:

import org.apache.spark.sql.functions.{explode, lit, split}

df.select(explode(split($"title", " ")), lit(1L))

关于python - 在 map 中创建 Spark Row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37450952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com