Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Scala中的AWS胶水在S3中加载CSV文件_Scala_Amazon S3_Aws Glue - Fatal编程技术网

使用Scala中的AWS胶水在S3中加载CSV文件

使用Scala中的AWS胶水在S3中加载CSV文件,scala,amazon-s3,aws-glue,Scala,Amazon S3,Aws Glue,这应该很容易。。。 对于我的AWS粘合作业,我想从S3上的CSV文件加载配置设置。通过这种方式,我的lambda函数可以触发作业并将文件名作为参数发送。在Python中,我可以轻松做到这一点: s3 = boto3.resource('s3') bucket = s3.Bucket(<my bucket name>) obj = s3.Object(<my bucket name>,<file location>) data = obj.get()['Body

这应该很容易。。。 对于我的AWS粘合作业,我想从S3上的CSV文件加载配置设置。通过这种方式,我的lambda函数可以触发作业并将文件名作为参数发送。在Python中,我可以轻松做到这一点:

s3 = boto3.resource('s3')
bucket = s3.Bucket(<my bucket name>)
obj = s3.Object(<my bucket name>,<file location>)
data = obj.get()['Body'].read().decode('utf-8')
s3=boto3.resource('s3'))
bucket=s3.bucket()
obj=s3.Object(,)
data=obj.get()['Body'].read().decode('utf-8')
在Scala中,我找不到任何与boto3库等价的东西。我尝试过以下getSourceWithFormat函数:

var datasource = glueContext.getSourceWithFormat("s3", JsonOptions(Map("paths" -> Set(<file folder name>)),
     Map("exclusions" -> <file patterns to exclude>)), 
     format = "csv", formatOptions = JsonOptions(Map("separator" -> "\t"),Map("header" -> true)))
     .getDynamicFrame()
var datasource=glueContext.getSourceWithFormat(“s3”,JsonOptions(映射(“路径”->Set()),
地图(不包括“->),
format=“csv”,formatOptions=JsonOptions(映射(“分隔符”->“\t”),映射(“标题”->true)))
.getDynamicFrame()
但我只想加载一个文件,并像处理字符串数组一样处理它


谢谢大家!

如何将数据源转换为数据帧,然后对其调用collect方法

val  myArray = datasource.toDF().collect

应该是这样的:

var datasource = glueContext.getSourceWithFormat("s3", JsonOptions(Map("paths" -> Set(<file folder name>)),
     Map("exclusions" -> <file patterns to exclude>)), 
     format = "csv", formatOptions = JsonOptions(Map("separator" -> "\t"),Map("header" -> true)))
     .getDynamicFrame()
  • 用Lambda编写python代码来读取文件
  • 使用scala代码创建粘合作业
  • 确保已启用触发器,该触发器将使用文件名调用粘合作业
    像这样的:?您可以查找Java/Scala S3库,它们将允许您访问bucket中的文件。您可以根据格式读取文件:文本、csv、二进制、json等。您可以使用(我是其中的一员)将S3对象作为Akka Stream
    源文件读取,知道Akka提供了一个CSV框架。您可以用python编写lambda,如果没有找到等效的scala代码,可以通过lambda触发器调用scala中的粘合作业。谢谢@bdcloud。“这就是我最后要做的事。”道格拉斯达利,如果有帮助,请将此标记为已回答。