Elasticsearch/Spark序列化似乎不适合嵌套类型.
例如:
public class Foo implements Serializable {
private List<Bar> bars = new ArrayList<Bar>();
// getters and setters
public static class Bar implements Serializable {
}
}
List<Foo> foos = new ArrayList<Foo>();
foos.add( new Foo());
// Note: Foo object does not contain nested Bar instances
SparkConf sc = new SparkConf(); //
sc.setMaster("local");
sc.setAppName("spark.app.name");
sc.set("spark.serializer", KryoSerializer.class.getName());
JavaSparkContext jsc = new JavaSparkContext(sc);
JavaRDD javaRDD = jsc.parallelize(ImmutableList.copyOf(foos));
JavaEsSpark.saveToEs(javaRDD, INDEX_NAME+"/"+TYPE_NAME);
Run Code Online (Sandbox Code Playgroud)
上面的代码可以工作,类型文档Foo
将在Elasticsearch中编入索引.
当对象中的bars
列表Foo
不为空时,会出现问题,例如:
Foo = new Foo();
Bar = …
Run Code Online (Sandbox Code Playgroud) 使用Elasticsearch with Spark时,更新现有实体的正确方法是什么?
我想要像下面这样的东西:
但是,有几个问题:
如果为了测试,我_id
在新值的映射中硬编码,则抛出以下异常:
org.elasticsearch.hadoop.rest.EsHadoopInvalidRequest
应如何_id
检索,以及如何将其传回Spark?
我在下面包含以下代码,以更好地说明我尝试做的事情:
JavaRDD<Map<String, Object>> esRDD = JavaEsSpark.esRDD(jsc, INDEX_NAME+"/"+TYPE_NAME,
"?source=,field1,field2).values();
Iterator<Map<String, Object>> iter = esRDD.toLocalIterator();
List<Map<String, Object>> listToPersist = new ArrayList<Map<String, Object>>();
while(iter.hasNext()){
Map<String, Object> map = iter.next();
// Get existing values, and do transformation logic
Map<String, Object> newMap = new HashMap<String, Object>();
newMap.put("_id", ??????);
newMap.put("field1", new_value);
listToPersist.add(newMap);
}
JavaRDD javaRDD = jsc.parallelize(ImmutableList.copyOf(listToPersist));
JavaEsSpark.saveToEs(javaRDD, INDEX_NAME+"/"+TYPE_NAME);
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望更新现有地图,而不是创建新地图.
在使用Spark时,是否有任何示例代码可以显示更新elasticsearch中现有实体的正确方法?
谢谢
以下将打印 Windows 批处理文件中的当前数据和时间:
for /f "tokens=2,3,4,5,6 usebackq delims=:/ " %%a in ('%date% %time%') do echo %%c-%%a-%%b %%d%%e
Run Code Online (Sandbox Code Playgroud)
我在这里找到了这个。
但是,如果放置在循环中,初始数据和时间将不断打印,并且不会更新以反映新时间。
如何修改它以反映当前时间并在循环内工作?
谢谢
我有 - 或者更确切地说有 - 一个正在运行的 Spring 应用程序,在 IntelliJ 中运行。它包含几个用 、 注释的类@Configuration
和几个@Component
bean。在某个时刻,发生了以下情况:
Intelli 开始在代码编辑器中显示错误,指出“无法自动装配。未找到‘xxx’类型的 bean ”。但也有这样的 Bean 带有注释@Component
。
@Component
未达到特定 bean 构造函数中的断点。但并非所有豆类都是如此@Component
。
在调试模式下运行时,@Configuration
无法到达某些文件中的断点,即使调试器之前已停止在那里。如果应用程序使用这些@Component
bean 之一自动装配,则应用程序将会失败。
应用程序启动时没有错误,但显然没有在@Configuration
被调用的类中配置多个 bean。
包含运行 Spring Boot 应用程序的 main 方法的类用 进行注释@SpringBootApplication
。@Component
与此类位于同一包中的类会被识别并可以自动装配,甚至可以自动装配到其他包中的类中。
我不知道代码或项目中有任何内容会发生变化。
在File -> Project Settings -> Modules下,Spring Application Context下现在已选择所有@Configuration
文件。然而这没有什么区别。
也尝试过Build -> Rebuild Project。
类所在的包没有改变。以前有人见过这样的事情吗?
谢谢
我们有一个使用Spring BlazeDS集成的应用程序.到目前为止,我们刚刚使用Spring和Flex,它运行良好.我们现在需要添加一些Spring MVC控制器.Spring BlazeDS文档指出,执行此操作的方法是在web.xml中声明两个sperate上下文,如下所示:
<servlet>
<servlet-name>flex</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>flex</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/spring/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
这是我的问题:在两种情况下都需要使用Spring bean - spring-mvc one和flex one.如何做到这一点 - 如何在一个上下文中声明一个bean(在xml中或通过组件扫描)并允许它与在其他上下文中声明的bean共享?谢谢 !
我们有一个Spring应用程序,它使用NamedParameterJdbcTemplate将消息持久化到Oracle数据库.sql是一个简单的插入.插入工作和数据库更新,但无论如何抛出以下异常.
04:02:58.276 [org.springframework.jms.listener.DefaultMessageListenerContainer#0-1] DEBUG o.s.jdbc.core.StatementCreatorUtils - JDBC 3.0 getParameterType call not supported
java.sql.SQLException: Unsupported feature
at oracle.jdbc.driver.OracleParameterMetaData.getParameterType(OracleParameterMetaData.java:166) ~[ojdbc6-11.2.0.2.0.jar:11.2.0.2.0]
at org.springframework.jdbc.core.StatementCreatorUtils.setNull(StatementCreatorUtils.java:231) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:213) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:144) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.BatchUpdateUtils.setStatementParameters(BatchUpdateUtils.java:63) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.access$000(NamedParameterBatchUpdateUtils.java:32) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils$1.setValues(NamedParameterBatchUpdateUtils.java:47) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:899) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:890) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:589) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:617) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:890) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.executeBatchUpdateWithNamedParameters(NamedParameterBatchUpdateUtils.java:40) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(NamedParameterJdbcTemplate.java:324) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(NamedParameterJdbcTemplate.java:319) [spring-jdbc-3.2.4.RELEASE.jar:3.2.4.RELEASE]
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人可以帮助确定问题,谢谢.
在标准 Spring 应用程序中,可以定义一个 PropertyPlaceholderConfigurer,它将加载一个或多个属性文件。然后,文件中定义的值将对应用程序的其余部分可见,无论是 XML ( "${}"
) 还是 Java (@Value
) 形式。
有没有办法,一旦加载了上下文,就可以从上下文本身获取这样的属性值,就像可以检索 bean 一样(ctx.getBean("bean-name")
) 一样?
我尝试了以下方法,但它不起作用:
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:META-INF/spring/spring-context.xml");
ctx.refresh();
ctx.start();
ctx.getEnvironment().getProperty("key-name")); // RETURNS NULL
Run Code Online (Sandbox Code Playgroud)
谢谢
以下功能
def compare[T] (o1:T, o2:T):Boolean = {
o1 > o2
}
Run Code Online (Sandbox Code Playgroud)
不会编译,因为 value > is not a member of type parameter T
将参数定义为类型AnyVal
也不起作用,编译器也会出现类似的错误.
但是,只能使用类型String
和值来调用该函数Long
,它们支持>
.
写这样一个函数的推荐灵魂是什么?
谢谢
我有一个正在工作的原型Spring Boot应用程序,它在Kafka队列上进行监听。除了中的配置外application.yml
,所需要的只是一个用MessageListener
注释的实现@KafkaListener
。
现在正在引入Spring Integration,并为此配置了以下bean:
@Bean
public KafkaMessageDrivenChannelAdapter<String, String>
adapter(KafkaMessageListenerContainer<String, String> container) {
KafkaMessageDrivenChannelAdapter<String, String> kafkaMessageDrivenChannelAdapter =
new KafkaMessageDrivenChannelAdapter<>(container);
kafkaMessageDrivenChannelAdapter.setOutputChannel(receiver());
return kafkaMessageDrivenChannelAdapter;
}
@Bean
public KafkaMessageListenerContainer<String, String> container() throws Exception {
ContainerProperties properties = new ContainerProperties(this.topic);
// set more properties
return new KafkaMessageListenerContainer<>(consumerFactory(), properties);
}
@Bean
public ConsumerFactory<String, String> consumerFactory() {
Map<String, Object> props = ...; // set proerties
return new DefaultKafkaConsumerFactory<>(props);
}
Run Code Online (Sandbox Code Playgroud)
应用程序未启动,并引发此错误:
Parameter 1 of method kafkaListenerContainerFactory in org.springframework.boot.autoconfigure.kafka.KafkaAnnotationDrivenConfiguration required a bean of …
Run Code Online (Sandbox Code Playgroud) 使用filter
,mutate
和remove_field
,Logstash可以配置为从输出中排除某些字段.
但是,如果只知道要包含的字段的名称,并且想要排除所有其他字段(前面不知道的字段名称),该怎么办?怎么可以这样做?
谢谢
spring ×3
apache-spark ×2
spring-boot ×2
batch-file ×1
blazeds ×1
generics ×1
logstash ×1
oracle11g ×1
scala ×1
spring-jdbc ×1
spring-kafka ×1
spring-mvc ×1