gpt4 book ai didi

apache-spark - Spark 数据帧 : registerTempTable vs not

转载 作者:行者123 更新时间:2023-12-03 07:27:09 25 4
gpt4 key购买 nike

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

虽然我不明白一件事......(请参阅此处“以编程方式指定架构”下的示例:https://spark.apache.org/docs/latest/sql-programming-guide.html#programmatically-specifying-the-schema)

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

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

最佳答案

对 DataFrame 使用 registerTempTable( tableName ) 方法的原因是,除了能够使用 Spark 提供的 DataFrame 方法之外,您还可以通过 sqlContext.sql( sqlQuery ) 方法发出 SQL 查询,该方法将该 DataFrame 用作 SQL 表。 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()

是否使用 SQL 或 DataFrame 方法(例如 selectgroupBy)可能很大程度上取决于偏好。我的理解是 SQL 查询被转换为 Spark 执行计划。

就我而言,我发现我需要的某些类型的聚合和窗口查询(例如计算每个客户的运行余额)可以在 Hive SQL 查询语言中使用,我怀疑这在 Spark 中很难做到.

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

关于apache-spark - Spark 数据帧 : registerTempTable vs not,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30926785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com