我对这个话题还很陌生,所以任何帮助将不胜感激。
我试图读取存储在S3存储桶中的csv文件,并将其数据转换为RDD以直接使用它,而无需在本地创建文件。
到目前为止,我已经能够使用AmazonS3ClientBuilder加载文件,但是我唯一要做的就是将文件内容包含在S3ObjectInputStream中,而我无法使用其内容。
val bucketName = "bucket-name"
val credentials = new BasicAWSCredentials(
"acessKey",
"secretKey"
);
val s3client = AmazonS3ClientBuilder
.standard()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withRegion(Regions.US_EAST_2)
.build();
val s3object = s3client.getObject(bucketName, "file-name.csv")
val inputStream = s3object.getObjectContent()
....
我也曾尝试使用BufferedSource来处理它,但是一旦完成,我不知道如何将其转换为数据帧或RDD来使用它。
val myData = Source.fromInputStream(inputStream)
....
答案 0 :(得分:0)
您可以使用Hadoop-AWS模块中提供的S3A文件系统来做到这一点:
<property><name>fs.s3.impl</name><value>org.apache.hadoop.fs.s3a.S3AFileSystem</value></property>
或将.config("fs.s3.impl", classOf[S3AFileSystem].getName)
添加到SparkSession
构建器中spark.read.csv("s3://bucket/key")
访问S3。如果您要询问的spark.read.csv("s3://bucket/key").rdd
答案 1 :(得分:0)
最后,我获得了寻找https://gist.github.com/snowindy/d438cb5256f9331f5eec的搜索结果