我对整个"大数据"技术世界非常陌生,最近开始阅读有关Spark的文章。不断出现的一件事是SparkSQL,但我始终无法理解它确实如此。
它是否应该将SQL查询转换为MapReduce,对你提供给它的数据进行操作?但是,就功能而言,数据帧不是已经基本上是 SQL 表了吗?
还是某种技术允许您连接到 SQL 数据库并使用 Spark 进行查询?在这种情况下,Spark在这里有什么意义 - 为什么不直接使用SQL?或者说,您可以将结构化SQL数据与平面数据结合使用?
我再次强调,我对这一切都很陌生,可能会也可能不会在:)屁股上说话。所以请纠正我,如果你发现我明显误解了什么,请原谅我。
你的第一个答案基本上是正确的,它是Spark中的一个API,你可以在其中用SQL编写查询,它们将被转换为并行化的Spark作业(Spark可以做更复杂的操作类型,而不仅仅是map和reduce)。Spark 数据帧实际上只是这个 API 的包装器,它只是访问 API 的另一种方式,这取决于你是更喜欢用 SQL 还是 Python/Scala 编码。
Spark
Spark是一个框架或非常大的组件集,用于可扩展,高效的大数据分析。
例如:人们每天都在向YouTube上传PB级的视频。现在,从磁盘读取 1 TB 所需的时间约为三个小时,每秒 100 兆字节。这实际上是相当长的时间(廉价的磁盘在这里无法帮助我们)。因此,我们面临的挑战是一台机器无法处理甚至存储所有数据。因此,我们的解决方案是通过机器集群分发数据。
数据帧是Spark中的主要抽象。
我们可以从文本文件、Json 文件、Hadoop 分布式文件系统、Apache Parquet 或 Hypertable 或 Amazon S3 文件、Apache HBase 构建数据帧,然后执行一些操作,无论数据来自何处,都可以对其进行转换。
Spark Sql
SparkSQL是一个用于结构化数据处理的Spark模块。 如此处的文档页面上所述。
因此,Spark SQL的兴趣之一是它允许我们使用SQL语法从许多数据源查询结构化数据,并提供许多其他可能性。我认为正是由于这个原因,我们不直接使用 SQL。