应该结束每个作业脚本代码,job.commit()但这个函数的确切操作是什么?
job.commit()调用后执行任何python语句是否安全?PS我没有在PyGlue.zipaws py源代码中找到任何描述:(
考虑一下aws批处理作业定义:
MyJobDefinition:
Type: "AWS::Batch::JobDefinition"
Properties:
Type: container
Parameters: {}
JobDefinitionName: "my-job-name"
ContainerProperties:
Command:
- "java"
- "-jar"
- "my-application-SNAPSHOT.jar"
- "--param1"
- "Ref::param1"
- "--param2"
- "Ref::param2"
Run Code Online (Sandbox Code Playgroud)
调用哪个结果:
java -jar my-application-SNAPSHOT.jar --param1 someValue1 --param2 someValue2
Run Code Online (Sandbox Code Playgroud)
如何更改作业定义以使其喜欢(注意等号):
java -jar my-application-SNAPSHOT.jar --param1=someValue1 --param2=someValue2
Run Code Online (Sandbox Code Playgroud)
请注意,Ref::param1它不是cloudformation模板参数,而是批量作业参数.
我创建了自己的存储库:
public interface MyRepository extends TypedIdCassandraRepository<MyEntity, String> {
}
Run Code Online (Sandbox Code Playgroud)
那么问题是如何自动创建cassandra表呢?目前Spring注入MyRepository试图将实体插入到不存在的表中.
那么有没有办法在spring容器启动期间创建cassandra表(如果它们不存在)?
PS如果只有config boolean属性而不添加xml行并创建类似BeanFactory等的东西,那将是非常好的 :-)
这是Spray-json 示例。这是NullOptions特性。
问题是当我声明一个案例类时说
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val some: RootJsonFormat[Some] = jsonFormat2(Some)
}
case class Some (
name:String,
age:Int
)
Run Code Online (Sandbox Code Playgroud)
并且 json 不包含字段,例如:
{
"name":"John"
}
Run Code Online (Sandbox Code Playgroud)
我得到: java.util.NoSuchElementException: key not found: age
所以我必须添加一个Option和这样的NullOption特征:
object MyJsonProtocol extends DefaultJsonProtocol with NullOptions {
implicit val some: RootJsonFormat[Some] = jsonFormat2(Some)
}
case class Some (
name:String,
age:Option[Int]
)
Run Code Online (Sandbox Code Playgroud)
一切正常。但我不想有一个所有成员都是Option. 有没有办法配置spray json解组来只设置空值而不需要额外的Option类型?
聚苯乙烯
我知道一般来说Option比空检查更好,但在我的情况下它只是猴子代码。
响应处理期间编组的完整示例也在这里
使用正文中包含的json数据发送get请求是合法的(在某些情况下).但soapui隐藏"body"子窗口我可以粘贴json字符串,因此只有键值对菜单可用.是否有任何解决方法在soapui中发送get请求与body?
Spring-test提供了在测试运行期间加载spring上下文的注释.例如,有一个org.springframework.test.context.junit4.SpringJUnit4ClassRunnerjunit runner类和org.springframework.test.context.ContextConfiguration注释用于指定上下文加载.对于集成测试,上下文加载可能会很长,并且在调试期间需要运行相同的测试十几次,直到它"丢失"所有错误.有没有办法在没有多次加载上下文的情况下这样做?例如,我完成了调试上下文加载,然后运行该上下文并开始在intellij中运行测试?这可能与Intellij Idea有关吗?
这是一个用于读取 csv 文件(scala)的代码:
val input = glueContext
.getCatalogSource(database = "my_database", tableName = "my_table")
.getDynamicFrame()
Run Code Online (Sandbox Code Playgroud)
哪个失败了,错误不明确:
com.amazonaws.services.glue.util.FatalException: Unable to parse file: my_file_20170101.csv.gz
at com.amazonaws.services.glue.readers.JacksonReader.hasNextFailSafe(JacksonReader.scala:91)
at com.amazonaws.services.glue.readers.JacksonReader.hasNext(JacksonReader.scala:36)
at com.amazonaws.services.glue.hadoop.TapeHadoopRecordReader.nextKeyValue(TapeHadoopRecordReader.scala:63)
at org.apache.spark.rdd.NewHadoopRDD$$anon$1.hasNext(NewHadoopRDD.scala:199)
at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:39)
at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:408)
at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:408)
at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:408)
at org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:126)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:96)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:53)
at org.apache.spark.scheduler.Task.run(Task.scala:99)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Run Code Online (Sandbox Code Playgroud)
该代码适用于其他 scv 文件,但此文件具有ANSI编码。有没有办法告诉胶水(或可能激发内部结构)以不同的编码读取文件?
scala character-encoding amazon-web-services apache-spark aws-glue
AWS 爬网程序具有用于添加新表的前缀属性。因此,如果我将前缀留空并启动爬虫,s3://my-bucket/some-table-backup它会创建名称为的表some-table-backup。有没有办法将其重命名为my-awesome-table并保持爬虫更新重命名的表?或者设置爬虫以创建具有提供名称的新表?
考虑一个 AWS Glue 作业片段:
val input = glueContext
.getCatalogSource(database = "my_db", tableName = "my_table")
.getDynamicFrame()
val myLimit = 10
if (input.count() <= myLimit) {
// end glue job here with error
}
// continue execution
Run Code Online (Sandbox Code Playgroud)
如何在错误状态下退出作业?如果我只是跳过执行,它就会以成功结束;如果我抛出异常,它就会因异常而失败。我可以调用某些东西来停止具有失败/错误状态的作业,但不引发异常吗?
更新
乍一看我可以:
val spark: SparkContext = SparkContext.getOrCreate()
val glueContext: GlueContext = new GlueContext(spark)
val jobId = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_ID").toArray)("JOB_ID")
spark.cancelJob(jobId)
Run Code Online (Sandbox Code Playgroud)
但:
SparkContext来自内部框架,结束工作可能会导致不可预测(不稳定)的结果。org.apache.spark.SparkContext#cancelJob接收Int而 AWS Glue 有String JOB_ID这样的:j_aaa11111a1a11a111a1aaa11a11111aaa11a111a1111111a111a1a1aa111111a。所以不能cancelJob直接传递。看一下spring webflux客户端的json配置示例:
ExchangeStrategies strategies = ExchangeStrategies
.builder()
.codecs(clientDefaultCodecsConfigurer -> {
//how to do the same but xml?
clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(new ObjectMapper(), MediaType.APPLICATION_JSON));
clientDefaultCodecsConfigurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(new ObjectMapper(), MediaType.APPLICATION_JSON));
}).build();
WebClient webClient = WebClient.builder().exchangeStrategies(strategies).build();
Run Code Online (Sandbox Code Playgroud)
同样的问题是这一个,但对于JAXB XML序列化。是否有 JAXB 和 xml 的解码器实现?是否可以使用HttpMessageConverter作为webclient 的解码器来使 spring boot 控制器和客户端实现一致?