我仍在努力理解最近推出的Spark数据集的全部功能。
是否有关于何时使用RDD和何时使用数据集的最佳实践?
Databricks在他们的公告中解释说,通过使用数据集,可以实现运行时和内存的惊人减少。尽管如此,据称数据集的设计“与现有RDD API协同工作”。
这仅仅是对向下兼容性的引用,还是有人更愿意在数据集上使用RDD的场景?
DataSet 1)它是Spark提供的结构化API,用于类似Table的结构。您可以在其中进行分析或数据操作,就像任何DataBase上的Tables一样。2)它是DataFrame的子集。如果您点击链接,您将看到DataSet支持的许多函数或方法http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.Dataset3)它是一个高级API
RDD 1)被称为弹性分布式数据集(RDD)2)它是Spark的核心级API。3) 当您处理任何转换为低级API(即RDD 4)的数据帧或数据集时,只要业务需求异常,并且您当时无法对数据帧或数据集执行操作,这些数据帧或数据集就会被完全使用。5) 您需要执行一些自定义共享变量操作
目前(Spark 1.6.0)<代码>数据集 API只是一个预览,只实现了一小部分功能,因此无法讲述任何有关最佳实践的信息。
从概念上讲,Spark数据集只是一个具有额外类型安全性的数据帧(或者如果您更喜欢看未来的话,数据帧是一个数据集[行])。这意味着你可以获得催化剂和钨的所有好处。它包括逻辑和物理计划优化、矢量化操作和低级内存管理。
你失去的是灵活性和透明度。
首先,必须对数据进行编码,然后才能与数据集一起使用。Spark为基本类型和产品/案例类提供了编码器,但目前还没有定义自定义序列化所需的API。它很可能与UDT API及其所有问题相对类似(例如,请参见如何在Spark SQL?中定义自定义类型的架构,序列化/反序列化Spark SQL dataframe的现有类)。它相对冗长,需要额外的努力,对于复杂的对象,它可能变得很不明显。此外,它还涉及API的一些较低级别的方面,这些方面没有很好的文档记录。
关于透明度,这与典型RDBMS中的规划师的问题几乎相同。这是一个了不起的工具,它可以分析您的数据,进行智能转换,但与任何工具一样,它可能会走错方向,让您专注于执行计划,并试图找出如何使事情正常运行。
基于预览,我想说它可以放在数据帧API和RDD API之间。它比数据帧更灵活,但仍提供类似的优化,非常适合一般的数据处理任务。它没有提供与RDD API相同的灵活性(至少在没有深入了解Catalyst内部的情况下)。
另一个区别,目前只是假设,是它如何与来宾语言(R、Python)交互的方式。与DataFrame
类似,DataSet
属于JVM。这意味着任何可能的交互都可以属于两个类别之一:本机JVM操作(如DataFrame
表达式)和来宾端代码(如Python UDF)。不幸的是,第二部分需要JVM和来宾环境之间昂贵的往返。
另请参见:
我浏览了一下Spark中RDD和Dataframe的链接有什么区别? > 我们可以在spark上运行Pandas、numpy数据帧功能吗。对于numpy,np。像df这样的熊猫在哪里和在哪里。分组依据[“”]。agg()
在Apache Spark中,这些API之间有什么区别?为什么以及什么时候我们应该选择其中一个?
我正在学习Python中的Spark,想知道有没有人能解释一下动作foreach()和转换map()之间的区别? <代码>rdd。map()返回一个新的RDD,就像Python中的原始map函数一样。然而,我想看到一个rdd。foreach()函数并理解其差异。谢谢
嗨,我对apache spark比较陌生。我想了解RDD、dataframe和数据集之间的区别。 例如,我从s3存储桶中提取数据。 在这种情况下,当我从s3加载数据时,什么是RDD?另外,由于RDD是不可变的,所以我可以更改df的值,使df不能是RDD。 如果有人能解释RDD、数据帧和数据集之间的区别,我将不胜感激。
我在读spark教科书,我看到了转换和动作,我又读了rdd函数,所以我很困惑,谁能解释一下转换和spark rdd函数之间的基本区别呢。 两者都用于更改rdd数据内容并返回一个新的rdd,但我想知道确切的解释。
我有一个数据框,其中一列是逗号分隔的数据。 例如:数据如下所示:[{value:1},{value:2,value:3},{some value},{somevalue,othervalue}] 列是字符串数据类型。我想将其转换为列表并应用一些函数。现在我有一个函数来完成字符串列到列表的转换 但是哪个功能更好呢