小编Dan*_*zan的帖子

Spark SQL失败,出现java.lang.NoClassDefFoundError:org/codehaus/commons/compiler/UncheckedCompileException

只要在数据帧上调用第一个操作,在Java中运行Spark SQL(v2.1.0_2.11)程序会立即失败并出现以下异常:

java.lang.ClassNotFoundException: org.codehaus.commons.compiler.UncheckedCompileException
Run Code Online (Sandbox Code Playgroud)

我在Eclipse之外的spark-submit环境中运行它.我使用以下Spark SQL Maven依赖项:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.1.0</version>
    <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

apache-spark-sql

13
推荐指数
4
解决办法
7768
查看次数

如何以computeIfAbsent效率实现Map putIfAbsent语义?

考虑以下代码:

ConcurrentHashMap<String, Value> map = new ConcurrentHashMap<>();

boolean foo(String key) {
    Value value = map.get(key);
    if (value == null) {
        value = map.putIfAbsent(key, new Value());
        if (value == null) {
            // do some stuff
            return true;
        }
    }
    // do some other stuff
    return false;
 }
    
Run Code Online (Sandbox Code Playgroud)

假设foo()由多个线程并发调用。还假设呼叫new Value()是昂贵的。代码很冗长,仍然会导致Value创建冗余对象。上述逻辑能否以一种保证不Value创建冗余对象的方式实现(即new Value()最多调用一次)?我正在寻找一个干净的实现 - 最少的代码而不显式获取锁。

computeIfAbsent 可能是一个不错的选择,但是它的返回语义不符合所需的逻辑。

java

6
推荐指数
1
解决办法
289
查看次数

Jersey 服务器发送的事件不适用于 Firefox

泽西岛 2.1.4、Java 8、Tomcat 8、火狐 38.0.1

服务器:

@GET
@Produces(SseFeature.SERVER_SENT_EVENTS)
public EventOutput listenToBroadcast() {
    final EventOutput eventOutput = new EventOutput();
    this.broadcaster.add(eventOutput);
    return eventOutput;
}
Run Code Online (Sandbox Code Playgroud)

客户:

var source = new EventSource('broadcast');
source.addEventListener('event', function(event) {
    alert('event');
}, false);
source.onopen = function() {
    alert('connection open');
};
Run Code Online (Sandbox Code Playgroud)

使用 Firefox,页面加载时不会显示连接打开警报。Firefox 在控制台中显示以下错误: Firefox 无法建立与服务器的连接http://localhost:8080/broadcast。当第一个事件到来时,onopen 函数会被调用。在这种情况下,仅调用 onopen 函数,而不调用事件侦听器。

Chrome 工作正常。此外,该演示可以在 Firefox 中正常运行。

页面加载时,在服务器发送事件之前,Firefox 中的“网络”选项卡显示它收到了 /broadcast SSE 端点的 OK 200,但不存在标头。Jersey 日志显示连接建立的以下内容:

o.glassfish.jersey.filter.LoggingFilter  : 11 * Server has received a request on thread http-nio-8080-exec-3
11 > GET …
Run Code Online (Sandbox Code Playgroud)

firefox jersey server-sent-events

2
推荐指数
1
解决办法
3246
查看次数