`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、分区数等?

  1. 在 Spark 1.6 之前,Spark 有许多上下文,例如 sqlcontexthivecontext 等,可以处理不同类型的数据源。对于 Spark2,Spark 应用程序的起点是 SparkSession,它包含所有上述上下文。

  2. 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