一些消息来源,比如Mathei Zaharia的Keynote:Spark 2.0 talk,提到Spark数据帧构建在RDD之上。我在DataFrame类中发现了一些关于RDD的内容(在Spark 2.0中,我必须查看DataSet);但我对这两个API在幕后是如何结合在一起的理解仍然非常有限。
有人能解释一下数据帧是如何扩展RDD的吗?
根据DataBricks的文章《深入研究Spark SQL的Catalyst优化器》(请参阅在Spark SQL中使用Catalyst),RDD是Catalyst构建的物理计划的元素。所以,我们用数据帧来描述查询,但最终Spark是在RDD上运行的。
此外,您还可以使用EXPLAIN
指令查看查询的物理计划。
// Prints the physical plan to the console for debugging purpose
auction.select("auctionid").distinct.explain()
// == Physical Plan ==
// Distinct false
// Exchange (HashPartitioning [auctionid#0], 200)
// Distinct true
// Project [auctionid#0]
// PhysicalRDD //[auctionid#0,bid#1,bidtime#2,bidder#3,bidderrate#4,openbid#5,price#6,item#7,daystolive#8], MapPartitionsRDD[11] at mapPartitions at ExistingRDD.scala:37
我开始使用Spark DataFrames,我需要能够枢轴的数据,以创建多个列1列多行。在Scalding中有内置的功能,我相信Python中的熊猫,但是我找不到任何新的Spark Dataframe。 我假设我可以编写某种自定义函数来实现这一点,但我甚至不知道如何开始,特别是因为我是Spark的新手。如果有人知道如何使用内置功能或如何在Scala中编写东西的建议来实现这一点,我们将不胜感激。
我想编写一个具有重分区的大型数据帧,所以我想计算源数据帧的重分区数。 数据帧/default_blocksize的大小 所以请告诉我如何在spark scala中计算数据帧的大小 提前谢谢。
我有以下spark数据帧。一个来自文本文件,另一个来自Databricks中的Spark表: 尽管数据完全相同,但以下代码报告了差异。我希望df3为空: 我需要在比较之前订购数据吗?-如果是,我该怎么做 我看不出上面的连接是在哪里完成的。它将如何匹配行?[ID]和[帐户]是主键 以上是比较2个数据帧的最佳方法吗 这是数据-其中[ID]和[帐户]是主键
我正在使用数据帧读取。拼花地板文件,但不是将它们转换为rdd来进行我的正常处理,我想对它们进行处理。 所以我有我的文件: 即使从数据帧转换为RDD,我也会收到以下错误: :26:错误:值zipWithIndex不是组织的成员。阿帕奇。火花sql。一行 任何人都知道如何做我正在尝试做的事情,本质上是尝试获取值和列索引。 我在想这样的事情: 但最后一部分被卡住了,因为不知道如何做zipWithInde
null 非常感谢任何指向文档或非常基本的示例的指针。
有人能解释一下将为Spark Dataframe创建的分区数量吗。 我知道对于RDD,在创建它时,我们可以提到如下分区的数量。 但是对于创建时的Spark数据帧,看起来我们没有像RDD那样指定分区数量的选项。 我认为唯一的可能性是,在创建数据帧后,我们可以使用重新分区API。 有人能告诉我在创建数据帧时,我们是否可以指定分区的数量。