AWS Glue用隔板写镶木地板

时间:2018-03-06 23:28:44

标签: amazon-web-services apache-spark pyspark aws-glue

我可以写成镶木地板格式并按照这样的列进行分区:

jobname = args['JOB_NAME']
#header is a spark DataFrame
header.repartition(1).write.parquet('s3://bucket/aws-glue/{}/header/'.format(jobname), 'append', partitionBy='date')

但我无法使用Glue的DynamicFrame执行此操作。

header_tmp = DynamicFrame.fromDF(header, glueContext, "header")
glueContext.write_dynamic_frame.from_options(frame = header_tmp, connection_type = "s3", connection_options = {"path": 's3://bucket/output/header/'}, format = "parquet")

我已经尝试将partitionBy作为connection_options字典的一部分传递,因为AWS文档说镶嵌胶水不支持任何格式选项,但这不起作用。

这可能,怎么样?至于这样做的原因,我认为工作书签需要工作,因为这对我目前不起作用。

2 个答案:

答案 0 :(得分:4)

来自AWS Support(稍微复述):

截至今天,Glue在写入镶木地板时不支持partitionBy参数。尽管如此,这仍在进行中。

使用Glue API写入镶木地板是必需的,用于工作书签功能以使用S3源。

截至今天,无法对镶木地板文件进行分区 AND 启用作业书签功能。

编辑:今天(3/23/18)我在documentations找到了

glue_context.write_dynamic_frame.from_options(
frame = projectedEvents,
connection_options = {"path": "$outpath", "partitionKeys": ["type"]},
format = "parquet")

该选项可能一直存在,我和AWS支持人员都错过了它,或者它最近才被添加。无论哪种方式,现在似乎都有可能。

答案 1 :(得分:1)

我将数据框中的某些列用作partionkeys对象:

<!-- :
@echo off && mode 50,03 && title <nul && title .\%~nx0 
start /d  "c:\Program Files (x86)\Google\Chrome\Application\" chrome.exe -new-tab "www.youtube.com/watch?v=BISQwNjP2NE"
%__APPDIR__%wScript.exe "%~dpnx0?.wsf" && goto :EOF
--> <job> <script language = "vbscript">
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.AppActivate "chrome"
WScript.Sleep 4000 
objShell.SendKeys " "           ' use space (charater) to play/pause 
'objShell.SendKeys ("+{F10}")    left click | in your question, the  
'objShell.SendKeys "{DOWN}"      left click | left click is not works
'objShell.SendKeys "{ENTER}"     left click | for play the video
</script></job>