BigQuery创建PySpark存储过程报FROM语法错误,求原因排查
问题排查与解决方案
错误原因
你在定义PySpark存储过程时,错误使用了R语言的字符串分隔符R"""来包裹Python代码。BigQuery的SQL解析器会将R"""识别为无效SQL语法,进而把后续Python代码里的from关键字当成SQL语句的一部分,触发语法错误。
修正后的代码
将LANGUAGE PYTHON AS R"""替换为LANGUAGE PYTHON AS """即可解决问题,修正后的完整代码如下:
CREATE OR REPLACE PROCEDURE my_bq_project.my_dataset.spark_proc() WITH CONNECTION `my-project-id.us.my-connection` OPTIONS(engine="SPARK", runtime_version="1.1") LANGUAGE PYTHON AS """ from pyspark.sql import SparkSession spark = SparkSession.builder.appName("spark-bigquery-demo").getOrCreate() # Load data from BigQuery. words = spark.read.format("bigquery") \ .option("table", "bigquery-public-data:samples.shakespeare") \ .load() words.createOrReplaceTempView("words") # Perform word count. word_count = words.select('word', 'word_count').groupBy('word').sum('word_count').withColumnRenamed("sum(word_count)", "sum_word_count") word_count.show() word_count.printSchema() # Saving the data to BigQuery word_count.write.format("bigquery") \ .option("writeMethod", "direct") \ .save("wordcount_dataset.wordcount_output") """
额外注意事项
- 确保
my-project-id.us.my-connection是已创建的有效Spark连接,且具备访问BigQuery公共数据集和写入目标数据集的权限; - 确认目标数据集
wordcount_dataset已存在,若不存在需提前创建; - 若使用的是较新版本的BigSpark runtime,可适当调整
runtime_version参数值。
内容的提问来源于stack exchange,提问作者ohh
相关产品推荐
相关产品推荐

