我是Spark
的新用户我正试图访问Hive
表格Spark
1)创建了Spark上下文
val hc=new HiveContext(sc)
val hivetable= hc.sql("Select * from test_db.Table")
我的问题是我得到了Spark的表格。
1)为什么我们需要注册表?
2)我们可以直接执行SQL operations
为什么我们还需要Dataframe
个功能
像Join, Select, Filter
......等?
SQL Query`和Dataframe Operations之间的操作有什么不同
3)什么是Spark优化?它是如何工作的?
答案 0 :(得分:1)
如果您使用Spark HiveContext访问Hive表,则无需注册临时表。将DataFrame注册为临时表允许您对其数据运行SQL查询。假设您正在从某个位置访问文件中的数据,并且您希望对此数据运行SQL查询。
然后你需要来自Row RDD的createDataframe
,你将在这个DataFrame上注册临时表来运行SQL操作。要对该数据执行SQL查询,您需要在代码中使用Spark SQLContext
。
两种方法都使用完全相同的执行引擎和内部数据结构。在一天结束时,所有这些都归结为开发人员的个人喜好。
可以说,DataFrame查询更容易以编程方式构建 提供最小型的安全性。
纯SQL查询可以更简洁,更容易理解。
还有便携式,可以使用所有支持的语言而无需任何修改。使用HiveContext
这些也可用于公开某些功能,这些功能在其他方面是不可访问的(例如没有Spark包装器的UDF
参考:Spark sql queries vs dataframe functions
这是关于Spark RDDs与DataFrames与SparkSQL之间性能比较的良好阅读reference
显然我没有得到答案,并会继续通过网络进行研究并找出解决方案:)