为什么我无法从DSX笔记本中的Amazon S3加载数据?
问题描述:
我用下面的代码加载从Amazon S3中的数据:为什么我无法从DSX笔记本中的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)
但是当我运行这个代码片断,我碰到下面的错误。从另一个数据源(如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'
答
如果您愿意,请使用此替代方法摄取。
对于火花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")
感谢, 查尔斯。
该错误指出“摄取”中没有“连接器”。你确定你从正确的图书馆进口吗? – Njol
请不要创建新的SQLContext。 DSX上的笔记本已经有了一个。 –
检查您选择的Spark版本。 iirc,Spark 1.6和Spark 2.x有不同版本的摄入库。此外,Python 2.7与Python 3.5可以发挥作用。 –