Reputation: 803
I'm trying to read some parquet files stored in a s3 bucket. I am using the following code:
s3 = boto3.resource('s3')
# get a handle on the bucket that holds your file
bucket = s3.Bucket('bucket_name')
# get a handle on the object you want (i.e. your file)
obj = bucket.Object(key = 'file/key/083b661babc54dd89139449d15fa22dd.snappy.parquet')
# get the object
response = obj.get()
# read the contents of the file and split it into a list of lines
lines = response[u'Body'].read().split('\n')
When trying to execute the last line of code lines = response[u'Body'].read().split('\n')
I'm getting the following error:
TypeError: a bytes-like object is required, not 'str'
I'm not really sure how to solve this issue.
Upvotes: 1
Views: 7725
Reputation: 803
Instead of boto3 I had to use the following code:
myAccessKey = 'your key'
mySecretKey = 'your key'
import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.amazonaws:aws-java-sdk:1.10.34,org.apache.hadoop:hadoop-aws:2.6.0 pyspark-shell'
import pyspark
sc = pyspark.SparkContext("local[*]")
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
hadoopConf = sc._jsc.hadoopConfiguration()
hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
hadoopConf.set("fs.s3.awsAccessKeyId", myAccessKey)
hadoopConf.set("fs.s3.awsSecretAccessKey", mySecretKey)
df = sqlContext.read.parquet("s3://bucket-name/path/")
Upvotes: 2