类型错误:sql() 缺少 1 个必需的位置参数:pyspark 中的“sqlQuery”

JDo*_*Doe 1 apache-spark apache-spark-sql pyspark

我正在尝试估计数据块上 pyspark 3.0.1 中数学分数的比例。有些情况下我的total_marks是0。所以我写了下面的代码

 df_data.registerTempTable('myTable')
 df_oversees2=SQLContext.sql("select A.*,case when total_marks=0 then 0 else (maths_marks/total_marks) end as prop_maths from myTable A ")
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息

TypeError: sql() missing 1 required positional argument: 'sqlQuery'
Run Code Online (Sandbox Code Playgroud)

您能帮我解决这个问题吗?我还使用下面的代码验证了我的 Total_marks 和 maths_marks 是否存在于我的表格中

df1 = sqlContext.sql("select maths_marks,total_marks from myTable")
df1.show()
Run Code Online (Sandbox Code Playgroud)

我看到两个字段的输出

mck*_*mck 5

SQLContext不同的是sqlContext- 后者是一个SQLContext附加到 a 的类SparkContext,而前者是一个不附加到 any 的类SparkContext。因此,您需要执行以下操作:

sqlContext = SQLContext(sc)
df_oversees2 = sqlContext.sql("your query")
Run Code Online (Sandbox Code Playgroud)

无论如何,它已被弃用,更好的方法是调用

spark.sql("your query")
Run Code Online (Sandbox Code Playgroud)

其中spark是一个sparkSession对象。