首页 > 解决方案 > 尝试在 spark 中读取 athena 表时出错

问题描述

我在 pyspark 中有以下代码片段:

import pandas as pd
from pyspark import SparkContext, SparkConf
from pyspark.context import SparkContext
from pyspark.sql import Row, SQLContext, SparkSession
import pyspark.sql.dataframe

def validate_data():
    conf = SparkConf().setAppName("app")
    spark = SparkContext(conf=conf)
    config = {
    "val_path" : "s3://forecasting/data/validation.csv"
    }

    data1_df = spark.read.table("db1.data_dest”)
    data2_df = spark.read.table("db2.data_source”)
    print(data1_df.count())
    print(data2_df.count())


if __name__ == "__main__":
    validate_data()

现在此代码在 sagemaker 上的 jupyter notebook 上运行时可以正常工作(连接到 EMR)

但是当我们在终端上作为 python 脚本运行时,它会抛出这个错误

错误信息

AttributeError: 'SparkContext' object has no attribute 'read'

我们必须自动化这些笔记本,所以我们正在尝试将它们转换为 python 脚本

标签: apache-sparkpysparkamazon-emramazon-sagemaker

解决方案


您只能read在 Spark Session 上调用,而不能在 Spark Context 上调用。

from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession

conf = SparkConf().setAppName("app")
spark = SparkSession.builder.config(conf=conf)

或者您可以将 Spark 上下文转换为 Spark 会话

conf = SparkConf().setAppName("app")
sc = SparkContext(conf=conf)
spark = SparkSession(sc)

推荐阅读