当前位置: 首页 > 知识库问答 >
问题:

在地图中创建Spark Row

长孙鸿
2023-03-14

我在网上看到了Dataframes教程https://databricks.com/blog/2015/02/17/introducing-dataframes-in-spark-for-large-scale-data-science.html这是用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()

但我不知道:

>

  • 如何将字段名分配给以valtitle_words_df=...

    我有错误的值toDF不是一个成员org.apache.spark.rdd.RDD[org.apache.spark.sql.行]

    提前谢谢你的帮助。

  • 共有1个答案

    冯通
    2023-03-14

    如何为行分配字段名

    PythonRow与Scala对应的对象类型截然不同。它是一个用名称扩充的元组,与非类型集合(o.a.s.sql.Row)相比,它更等同于产品类型。

    我有错误的值toDF不是一个成员org.apache.spark.rdd.RDD[org.apache.spark.sql.行]

    因为o.a.s.sql。行基本上是非类型化的,它不能与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))
    
     类似资料:
    • 使用亿景智图,您可以生成自己的业务地图,并在线共享和发布这些地图,比如,客户分布图、配送路线图、布局规划图等等。生成一幅地图,基本流程是这样的:新建地图->添加图层->绘制对象(支持批量添加及使用已有数据)->发布地图。这里,为大家介绍,如何构建自定义地图: ● 新建地图 ● 上传Excel/CSV数据 ● 快速添加行政区划 ● 手动绘制地图 ● 搜索添加标注 ● 设置地图名称 ● 设定地图默认视

    • 注意: Adobe Muse 不再添加新增功能,并将于 2020 年 3 月 26 日停止支持。有关详细信息和帮助,请参阅 Adobe Muse 服务结束页面。 Adobe Muse 中的网站地图是什么? 网站地图代表的是网站的层次结构。您可以创建位于同一级别的页面(无子页面),或者您可以创建包含不同层次页面的网站地图。(例如,较大网站可具有包含两个名为“我们的使命”和“我们的员工”子页面的“关于

    • 问题内容: 我有一张地图清单。 列表中的值例如是 最后,我想要一个Map>,就像 如何在Java中实现这一目标。 代码: 现在,基于与我想要的相同ID,此genericList是该列表的输入并来自此列表 基本上,要根据ID将响应归类为String,将具有相同ID的响应分组在列表中,然后创建一个以ID为键并以列表为值的新映射。 问题答案: 您可以使用Java 8进行以下操作: 这将打印: 整数:1

    • 我试图在Java创建一个地图,但失败了。 它告诉我在行的末尾需要或,但是,当我尝试其中一个时,我会收到错误。 将告诉我“映射是抽象的;无法实例化” 将告诉我“应为数组初始值设定项” 我对编码还不太熟悉,所以请对我友好一点,多多忍耐:)

    • 问题内容: 我需要一个数据结构来以1:1关系存储string-int值对,并且也能够从任何一种方式查找它们的对应对象。 我编写了一个带有Hashtable和String数组的类,并将数据存储了2次,并使用内置函数进行查找。 我的问题是,有没有更好的方法可以做到这一点?更好的是,我的意思是要高效并且不存储2次数据,并且最好不要编写任何代码:P。 问题答案: 看来您可能正在寻找bimap。 Googl

    • 问题内容: 我想创建一个包含以下项的条目 如何用Java做到这一点? 我尝试了以下失败。 问题答案: