Spark DataFrames:registerTempTable vs

时间:2015-06-18 22:19:29

标签: apache-spark dataframe

我昨天刚开始使用DataFrame,到目前为止我真的很喜欢它。

我不明白一件事...... (参考&#34下的示例;以编程方式指定架构"此处:https://spark.apache.org/docs/latest/sql-programming-guide.html#programmatically-specifying-the-schema

在这个例子中,数据帧被注册为一个表(我猜是为了提供对SQL查询的访问......?)但是正在访问的完全相同的信息也可以由peopleDataFrame.select完成(" name& #34;。)

所以问题是..你想什么时候将数据帧注册为表而不是仅使用给定的数据帧函数?并且一种选择比另一种更有效吗?

3 个答案:

答案 0 :(得分:28)

对DataFrame使用registerTempTable( tableName )方法的原因是,除了能够使用Spark提供的DataFrame方法之外,您还可以通过{发出SQL查询{1}}方法,将该DataFrame用作SQL表。 sqlContext.sql( sqlQuery )参数指定在SQL查询中用于该DataFrame的表名。

tableName

是否使用SQL或DataFrame方法(如val sc: SparkContext = ... val hc = new HiveContext( sc ) val customerDataFrame = myCodeToCreateOrLoadDataFrame() customerDataFrame.registerTempTable( "cust" ) val query = """SELECT custId, sum( purchaseAmount ) FROM cust GROUP BY custId""" val salesPerCustomer: DataFrame = hc.sql( query ) salesPerCustomer.show() select)可能主要是偏好问题。我的理解是SQL查询被转换为Spark执行计划。

在我的情况下,我发现我需要的某些类型的聚合和窗口查询,比如计算每个客户的运行余额,在Hive SQL查询语言中可用,我怀疑在Spark中很难做到

如果您想使用SQL,那么您很可能想要创建groupBy而不是常规HiveContext。 Hive查询语言支持比通过普通SQLContext提供的更广泛的SQL。

答案 1 :(得分:0)

有一个很好的基准比较RDD与数据帧和SparkSQL性能:

Spark RDDs vs DataFrames vs SparkSQL

显然,使用SparkSQL对GroupBy进行计数和排序的速度明显加快。

如果你有一项关键任务工作,那么将两者都用来比较时间和性能可能是有意义的。

答案 2 :(得分:0)

例如,将数据帧加载到笔记本中的临时视图中非常方便,您可以在其中对数据运行探索性查询:

df.createOrReplaceTempView("myTempView")

然后在另一个笔记本中,您可以运行sql查询并获得开箱即用的所有出色集成功能,例如表格和图形可视化等。

%sql
SELECT * FROM myTempView