Spark-SQL 的 DataFrame 操作,用起来还挺香的,尤其是你想把结构化数据当表来查的时候,写起来就跟写 SQL 差不多,顺手。
DataFrame 其实就是个分布式表格,底层是RDD,但不用你自己管怎么分发、怎么缓存,Spark 都帮你搞定了,效率也挺高。你写的查询,后面都被 Catalyst 优化过,执行速度比原生RDD快多了。
还有一点蛮方便的,Spark-SQL可以直接读Hive的数据,像HiveContext
就专门干这个的。如果你项目里本来就在用 Hive,迁过来几乎不用改逻辑,兼容得还不错。
而且它支持的数据源种类也不少,JSON
、CSV
、JDBC
,甚至你本地的txt
文件都能直接读。对接方式比较统一,用SQLContext
或者SparkSession
搞定,没那么多套路。
讲真,如果你项目数据比较规整,又想写点SQL 风格的逻辑,那Spark-SQL是个不错的选项。嗯,对了,如果你还没搞清楚 RDD、DataFrame 之间的差别,可以顺手看看这篇Spark RDD 持久化策略选择指南,理清之后用起来更顺。