【问题标题】:Why can't I load data from Amazon S3 in DSX notebook?为什么我无法在 DSX 笔记本中从 Amazon S3 加载数据?
【发布时间】:2017-07-26 09:52:59
【问题描述】:

我使用以下代码从 Amazon S3 加载数据:

from ingest import Connectors
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

S3loadoptions = { 
                  Connectors.AmazonS3.ACCESS_KEY          : 'AKIAJYCJAFZYENNPACNA',
              Connectors.AmazonS3.SECRET_KEY          : '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',
              Connectors.AmazonS3.SOURCE_BUCKET       : 'ngpconnector',
              Connectors.AmazonS3.SOURCE_FILE_NAME    : 'addresses3.csv',
              Connectors.AmazonS3.SOURCE_INFER_SCHEMA : '1',
              Connectors.AmazonS3.SOURCE_FILE_FORMAT  : 'csv'}

S3DF = sqlContext.read.format('com.ibm.spark.discover').options(**S3loadoptions).load()
S3DF.printSchema()
S3DF.show(5)

但是当我运行这段代码 sn-p 时,我得到了以下错误。当我从另一个数据源(例如 dashDB)加载时,我收到了类似的错误消息。

AttributeErrorTraceback (most recent call last)
<ipython-input-1-9da344857d7e> in <module>()
      4 
      5 S3loadoptions = { 
----> 6                   Connectors.AmazonS3.ACCESS_KEY          : 'AKIAJYCJAFZYENNPACNA',
      7                   Connectors.AmazonS3.SECRET_KEY          : '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',
      8                   Connectors.AmazonS3.SOURCE_BUCKET       : 'ngpconnector',

AttributeError: 'NoneType' object has no attribute 'AmazonS3'

【问题讨论】:

  • 错误表明“摄取”中没有“连接器”。你确定你是从正确的库中导入的吗?
  • 请不要创建新的 SQLContext。 DSX 上的笔记本已经有了。
  • 检查您选择的 Spark 版本。 iirc,Spark 1.6 和 Spark 2.x 有不同版本的摄取库。此外,Python 2.7 与 Python 3.5 可能会发挥作用。

标签: amazon-s3 aws-sdk data-science-experience


【解决方案1】:

如果您愿意,请使用此替代方法来摄取。

https://datascience.ibm.com/blog/use-ibm-data-science-experience-to-read-and-write-data-stored-on-amazon-s3/

对于火花 1.6

hconf = sc._jsc.hadoopConfiguration() 

对于火花 2.0

spark = SparkSession.builder.getOrCreate()
hconf = spark.sparkContext._jsc.hadoopConfiguration()

在hadoop配置中设置S3参数

#Replace Accesskey with your Amazon AccessKey and Secret with amazon secret 
hconf.set("fs.s3a.access.key", "<put-your-access-key>")  
hconf.set("fs.s3a.secret.key", "<put-your-secret-key>") 

然后阅读

spark = SparkSession.builder.getOrCreate()  
df_data_1 = spark.read\  
 .format('org.apache.spark.sql.execution.datasources.csv.CSVFileFormat')\
  .option('header', 'true')\
  .load('s3a://<your-bucket-name>/<foldername>/<filename>.csv')
df_data_1.take(5) 

回写

df_data_1.write.save("s3a://charlesbuckets31/FolderB/users.parquet") 

谢谢, 查尔斯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-02
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    相关资源
    最近更新 更多