`pyspark.sql.SparkSession.sql` 和 `SQLContext.read.format()` 有什么区别?
What is difference between `pyspark.sql.SparkSession.sql` and `SQLContext.read.format()`?
我想使用 spark 向数据库发起查询。现在我正在使用
方法
df = SQLContext.read.format('jdbc')
.option('url',database_url)
.option('dbtable',my_query)
.option('numpartitions',number_of_partitions)
.option(...)
工作正常。但是还有另一种方法可以在 pyspark 中触发查询,称为
df = pyspark.sql.SparkSession().sql(myquery)
两者都在返回数据帧。
关于这个的问题很少:
1) 这两者到底有什么区别?
2) 在 pyspark.sql.SparkSession().sql(myquery)
的情况下,如何设置所有参数,如数据库 URL、分区数等?
在 Spark 1.6 之前,Spark 有许多上下文,例如 sqlcontext
、hivecontext
等,可以处理不同类型的数据源。对于 Spark2,Spark 应用程序的起点是 SparkSession
,它包含所有上述上下文。
DataFrameReader
使用 jdbc
API 提供支持。您可以执行以下命令来实现您想要的:
df = spark.read.jdbc(url, table, numPartitions=number_of_partitions)
即使这个也应该有效:
df = spark.read.format('jdbc').option('url',database_url)
.option('dbtable',my_query)
.option('numpartitions',number_of_partitions)
.option()......
以上片段中提到的 spark
只不过是 SparkSession
。看看相关的APIhere
我想使用 spark 向数据库发起查询。现在我正在使用
方法df = SQLContext.read.format('jdbc')
.option('url',database_url)
.option('dbtable',my_query)
.option('numpartitions',number_of_partitions)
.option(...)
工作正常。但是还有另一种方法可以在 pyspark 中触发查询,称为
df = pyspark.sql.SparkSession().sql(myquery)
两者都在返回数据帧。
关于这个的问题很少:
1) 这两者到底有什么区别?
2) 在 pyspark.sql.SparkSession().sql(myquery)
的情况下,如何设置所有参数,如数据库 URL、分区数等?
在 Spark 1.6 之前,Spark 有许多上下文,例如
sqlcontext
、hivecontext
等,可以处理不同类型的数据源。对于 Spark2,Spark 应用程序的起点是SparkSession
,它包含所有上述上下文。DataFrameReader
使用jdbc
API 提供支持。您可以执行以下命令来实现您想要的:df = spark.read.jdbc(url, table, numPartitions=number_of_partitions)
即使这个也应该有效:
df = spark.read.format('jdbc').option('url',database_url)
.option('dbtable',my_query)
.option('numpartitions',number_of_partitions)
.option()......
以上片段中提到的 spark
只不过是 SparkSession
。看看相关的APIhere