Pure spark vs spark SQL 在HDFS上查询数据
Pure spark vs spark SQL for quering data on HDFS
我在 hdfs 集群上有(表格)数据,需要对其进行一些稍微复杂的查询。我预计将来会用其他数据多次面对同样的情况。所以,问题:
选择在何处使用(纯)Spark以及在何处使用Spark-SQL在实现此类任务时需要考虑哪些因素?
以下是我能想到的选择因素:
对语言的熟悉程度:
在我的例子中,我更像是一个数据分析师而不是数据库专家,所以这会导致我使用 spark:与 Java/Scala 相比,我更愿意思考如何(有效地)实现数据选择=42=]。然而,这主要取决于查询。
序列化:
我认为可以 运行 Spark-SQL 查询而无需将自制的 jar+dep 发送给 spark worker(?)。但是,返回的数据是原始数据,应该在本地进行转换。
效率:
不知道两者有什么区别
我知道这个问题对 SO 来说可能太笼统了,但也许不是。那么,有更多知识的人可以提供一些见解吗?
关于第 3 点,根据您的输入格式,使用纯 Spark 与 Spark 时扫描数据的方式可能会有所不同 SQL。例如,如果您的输入格式有多个列,但您只需要其中的几个列,则可以使用 Spark SQL 跳过检索,而这在纯 Spark 中实现起来有点棘手。
除此之外,Spark SQL 有一个查询优化器,当使用 DataFrame 或查询语句时,生成的查询将通过优化器,以便更有效地执行。
Spark SQL不排除Spark;结合使用可能是最好的结果。
我在 hdfs 集群上有(表格)数据,需要对其进行一些稍微复杂的查询。我预计将来会用其他数据多次面对同样的情况。所以,问题:
选择在何处使用(纯)Spark以及在何处使用Spark-SQL在实现此类任务时需要考虑哪些因素?
以下是我能想到的选择因素:
对语言的熟悉程度: 在我的例子中,我更像是一个数据分析师而不是数据库专家,所以这会导致我使用 spark:与 Java/Scala 相比,我更愿意思考如何(有效地)实现数据选择=42=]。然而,这主要取决于查询。
序列化: 我认为可以 运行 Spark-SQL 查询而无需将自制的 jar+dep 发送给 spark worker(?)。但是,返回的数据是原始数据,应该在本地进行转换。
效率: 不知道两者有什么区别
我知道这个问题对 SO 来说可能太笼统了,但也许不是。那么,有更多知识的人可以提供一些见解吗?
关于第 3 点,根据您的输入格式,使用纯 Spark 与 Spark 时扫描数据的方式可能会有所不同 SQL。例如,如果您的输入格式有多个列,但您只需要其中的几个列,则可以使用 Spark SQL 跳过检索,而这在纯 Spark 中实现起来有点棘手。
除此之外,Spark SQL 有一个查询优化器,当使用 DataFrame 或查询语句时,生成的查询将通过优化器,以便更有效地执行。
Spark SQL不排除Spark;结合使用可能是最好的结果。