PySpark已用SparkSession.getOrCreate仍报弃用警告如何解决
问题原因
警告并非来自SparkSession.builder.getOrCreate()的调用,真正的触发点是你代码中手动实例化SQLContext的语句:
sqlContext = SQLContext(scSpark)
Spark 3.0.0版本开始,SQLContext本身已被标记为弃用,其全部能力已经整合到SparkSession实例中,初始化SQLContext时就会抛出你看到的FutureWarning。而且通读现有代码会发现,你定义的sqlContext变量从头到尾没有被调用过,属于完全多余的代码。
修改方案
- 直接删除
sqlContext = SQLContext(scSpark)这行冗余代码即可消除警告。 - 后续所有Spark SQL相关操作,直接使用你已经创建好的SparkSession实例
scSpark调用即可,你现有代码中scSpark.read.csv、scSpark.createDataFrame、scSpark.sql的写法本身就是符合Spark 3.x规范的,不需要额外调整。 - 你原代码最后一行多写了一个右括号,运行时会触发语法错误,修改时记得一并删除。
修改后的可运行代码如下:
scSpark = SparkSession.builder.config("spark.driver.extraClassPath", "./mysql-connector-java-8.0.29.jar").getOrCreate() jdbc_url = "jdbc:mysql://{0}:{1}/{2}".format(hostname, jdbcPort, dbname) connectionProperties = { "user": username, "password": password } #df=scSpark.read.jdbc(url=jdbc_url, table='bms_title', properties= connectionProperties) #df.show() df = scSpark.read.csv(data_file, header=True, sep=",", encoding='UTF-8').cache() df2 = df.first() df = df.exceptAll(scSpark.createDataFrame([df2])) df.createTempView("books") # 移除了末尾多余的右括号 output = scSpark.sql('SELECT `Postgraduate Course` AS Postgraduate_Course FROM books')
内容的提问来源于stack exchange,提问作者pyspark
相关产品推荐
相关产品推荐

