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

了解RDD和数据集

乐正浩博
2023-03-14

从数据集和RDD文档中,

数据集:

数据集是特定领域对象的强类型集合,可以使用函数或关系操作并行转换。每个数据集还有一个称为DataFrame的无类型视图,它是行数据集

RDD:

RDD表示可以并行操作的不可变、分区的元素集合

此外,据说它们之间的区别是:

主要区别在于,dataset是特定于域的对象的集合,而RDD是任何对象的集合。定义的域对象部分表示数据集的架构部分。所以,数据集API总是强类型的,并使用RDD没有的模式进行优化。

我这里有两个问题;

>

  • 当RDD是任何对象的集合时,它意味着什么?给定一个case类Person,我认为dataset[Person]和RDD[Person]都是领域特定对象的集合

    数据集API总是强类型并使用RDD不是的模式进行优化为什么说数据集API总是强类型而RDD不是?我以为RDD[Person]也是强类型的

  • 共有1个答案

    屈晨
    2023-03-14

    强类型数据集(不是数据帧)是一组记录类型(Scala产品),这些记录类型使用所谓的编码器映射到内部存储格式,而RDD可以存储任意可序列化对象(可序列化对象或Kryo可序列化对象)。因此,作为一个容器,RDD比Dataset更通用。

    以下:

    .所以数据集API总是强类型的(...),而RDD不是。

    这是完全荒谬的,表明你不应该相信你在互联网上能找到的一切。通常,API的类型保护明显弱于RDD。这在使用数据集[行]时尤其明显,但适用于任何数据集。

    考虑以下示例:

    case class FooBar(id: Int, foos: Seq[Int])
    
     Seq[(Integer, Integer)]((1, null))
       .toDF.select($"_1" as "id", array($"_2") as "foos")
       .as[FooBar]
    

    这显然破坏了类型安全。

     类似资料:
    • 问题内容: 我已经使用JavaScript和AJAX已有一段时间了,我想了解Cross Domain XHR的真正工作原理以及JQuery的处理方式,出于某种原因,我从来没有想过它的真正工作原理。我已经阅读了Wikipedia JSONP 文章,我更加困惑。我不确定我不了解什么。 我知道使用可以直接在JavaScript中使用数据。例如这个JS Fiddle示例。在这里,我用来显示图像列表。我可以

    • 一、RDD简介 RDD 全称为 Resilient Distributed Datasets,是 Spark 最基本的数据抽象,它是只读的、分区记录的集合,支持并行操作,可以由外部数据集或其他 RDD 转换而来,它具有以下特性: 一个 RDD 由一个或者多个分区(Partitions)组成。对于 RDD 来说,每个分区会被一个计算任务所处理,用户可以在创建 RDD 时指定其分区个数,如果没有指定,

    • 我对一些基本的Spring数据概念有点困惑。 据我所知,典型的DAO级别结构如下所示: 有了这个概念,我可以使用JPA作为第一个DAO接口的实现,使用JDBC作为第二个DAO接口的实现。 现在我想了解Spring存储库抽象。每个Spring Data tutorial都指定,我应该有一个接口,例如,该接口应该从JPararePository扩展。所以有了这个接口,我已经用JPA锁定了,对吧? 如果

    • 我仍在努力理解最近推出的Spark数据集的全部功能。 是否有关于何时使用RDD和何时使用数据集的最佳实践? Databricks在他们的公告中解释说,通过使用数据集,可以实现运行时和内存的惊人减少。尽管如此,据称数据集的设计“与现有RDD API协同工作”。 这仅仅是对向下兼容性的引用,还是有人更愿意在数据集上使用RDD的场景?

    • 好吧,我对使用Scala/Spark还比较陌生,我想知道是否有一种设计模式可以在流媒体应用程序中使用大量数据帧(几个100k)? 在我的示例中,我有一个SparkStreaming应用程序,其消息负载类似于: 因此,当用户id为123的消息传入时,我需要使用特定于相关用户的SparkSQL拉入一些外部数据,并将其本地缓存,然后执行一些额外的计算,然后将新数据持久保存到数据库中。然后对流外传入的每条

    • 我有一个如下的CSV文件。 我想把这个转化成下面。 基本上,我想在输出数据帧中创建一个名为idx的新列,该列将填充与键=idx,value=“n”后面的行相同的值“n”。