ошибка искровой оболочки: построитель значений не является членом объекта com.amazon aws .services.s3.model.PutObjectRequest - PullRequest
0 голосов
/ 04 августа 2020

Я только начинаю работать с EMR Hadoop / spark et c., Я пытаюсь использовать искровую оболочку для запуска кода scala для загрузки файла в местоположение EMRFS S3, однако я получаю сообщение об ошибке ниже -

Без импорта Если я запустил =>

val bucketName = "bucket"
val outputPath = "test.txt"

scala> val putRequest = PutObjectRequest.builder.bucket(bucketName).key(outputPath).build()
<console>:27: error: not found: value PutObjectRequest
   val putRequest = PutObjectRequest.builder.bucket(bucketName).key(outputPath).build()
                    ^

После добавления пакета импорта для PutObjectRequest я все равно получаю другую ошибку.

scala> import com.amazonaws.services.s3.model.PutObjectRequest

import com. amazon aws .services.s3.model.PutObjectRequest

scala> val putRequest = PutObjectRequest.builder.bucket(bucketName).key(outputPath).build()
<console>:28: error: value builder is not a member of object com.amazonaws.services.s3.model.PutObjectRequest
   val putRequest = PutObjectRequest.builder.bucket(bucketName).key(outputPath).build()
                                     ^

Я не уверен, что мне не хватает. Любая помощь будет принята с благодарностью!

Примечание: версия Spark - 2.4.5

1 Ответ

2 голосов
/ 04 августа 2020

Вместо использования построителя создайте объект PutObjectRequest через подходящий конструктор. Также создайте подключение к S3 с помощью AmazonS3ClientBuilder.

import com.amazonaws.regions.Regions
import com.amazonaws.services.s3.AmazonS3ClientBuilder
import com.amazonaws.services.s3.model.ObjectMetadata
import com.amazonaws.services.s3.model.PutObjectRequest

import java.io.File

val clientRegion = Regions.DEFAULT_REGION
val bucketName = "*** Bucket name ***"
val fileObjKeyName = "*** File object key name ***"
val fileName = "*** Path to file to upload ***"

val s3Client = AmazonS3ClientBuilder.standard.withRegion(clientRegion).build

// Upload a file as a new object with ContentType and title specified.
val request = new PutObjectRequest(bucketName, fileObjKeyName, new File(fileName))
val metadata = new ObjectMetadata()
metadata.setContentType("plain/text")
metadata.addUserMetadata("title", "someTitle")
request.setMetadata(metadata)
s3Client.putObject(request)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...