小编phe*_*ver的帖子

在Spark中需要kryo序列化(Scala)

我打开了kryo序列化:

conf.set( "spark.serializer", "org.apache.spark.serializer.KryoSerializer" )
Run Code Online (Sandbox Code Playgroud)

我想确保在节点之间进行混洗时使用kryo序列化自定义类.我可以这样用kryo注册这个类:

conf.registerKryoClasses(Array(classOf[Foo]))
Run Code Online (Sandbox Code Playgroud)

据我了解,这实际上并不能保证使用kyro序列化; 如果序列化程序不可用,kryo将回退到Java序列化.

为了保证kryo序列化的发生,我遵循了Spark文档中的这个建议:

conf.set("spark.kryo.registrationRequired", "true")
Run Code Online (Sandbox Code Playgroud)

但这会导致抛出IllegalArugmentException("Class未注册"),因为我认为Spark会在内部使用一堆不同的类,例如:

org.apache.spark.util.collection.CompactBuffer
scala.Tuple3
Run Code Online (Sandbox Code Playgroud)

当然,我不必用kryo手动注册每个单独的类?这些序列化程序都是用kryo定义的,那么有没有办法自动注册所有这些序列化程序?

apache-spark

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

如何知道emacs服务器是否正在运行

我只想在emacs服务器运行时在我的init文件中执行一些代码(特别是如果emacs是以--daemon标志启动的话).似乎没有任何钩子在server-start被调用时运行,并且没有变量我可以查看服务器是否正在运行.

黑客是使用(featurep 'server),因为服务器功能没有加载,除非服务器启动,这似乎适合我的目的,但我想知道正确的方法是什么.谢谢.

emacs

15
推荐指数
1
解决办法
2224
查看次数

在GHC中捕获Control-C异常(Haskell)

我在Haskell中构建了一个非常简单的read-eval-print-loop,它捕获了Control-C(UserInterrupt).但是,每当我编译并运行这个程序时,它总是捕获第一个Control-C并且总是在第二个Control-C上以退出代码130中止.无论我在之前和之间给出了多少行输入Control-Cs,它总是以这种方式发生.我知道我一定会错过一些简单的事情......请帮忙,谢谢!

注意:这是基于4的异常,因此Control.Exception而不是Control.OldException.

import Control.Exception as E
import System.IO

main :: IO ()
main = do hSetBuffering stdout NoBuffering
          hSetBuffering stdin NoBuffering
          repLoop

repLoop :: IO ()
repLoop
  = do putStr "> "
       line <- interruptible "<interrupted>" getLine
       if line == "exit"
          then putStrLn "goodbye"
          else do putStrLn $ "input was: " ++ line
                  repLoop

interruptible :: a -> IO a -> IO a
interruptible a m
  = E.handleJust f return m
  where
    f UserInterrupt
      = Just a
    f _
      = …
Run Code Online (Sandbox Code Playgroud)

haskell ghc

14
推荐指数
2
解决办法
2575
查看次数

通过Verilog VPI将256位线路传递给C功能

我在Verilog中有256位值:

reg [255:0] val;
Run Code Online (Sandbox Code Playgroud)

我想定义一个使用VPI调用外部C的系统任务$ foo,所以我可以像这样调用$ foo:

$foo(val);
Run Code Online (Sandbox Code Playgroud)

现在,在C定义函数"富",我不能简单地读取参数作为一个整数(PLI_INT32),因为我有太多的位,以适应在其中的一个.但是,我可以将参数作为字符串读取,这与字节数组相同.这是我写的:

static int foo(char *userdata) {
  vpiHandle systfref, args_iter, argh;
  struct t_vpi_value argval;
  PLI_BYTE8 *value;

  systfref = vpi_handle(vpiSysTfCall, NULL);
  args_iter = vpi_iterate(vpiArgument, systfref);

  argval.format = vpiStringVal;
  argh = vpi_scan(args_iter);
  vpi_get_value(argh, &argval);
  value = argval.value.str;

  int i;

  for (i = 0; i < 32; i++) {
    vpi_printf("%.2x ", value[i]);
  }
  vpi_printf("\n");

  vpi_free_object(args_iter);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,此代码将参数作为字符串读取,然后打印出字符串中的每个字符(也称为字节).这几乎完美.但是,该字节00始终被读取为20.例如,如果我按如下方式分配Verilog reg:

 val = 256'h000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f;
Run Code Online (Sandbox Code Playgroud)

并使用它调用它$foo(val),然后C函数在模拟时打印它:

VPI: 20 01 02 …
Run Code Online (Sandbox Code Playgroud)

c verilog

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

例外导致Future永远不会完成

给出以下代码:

import scala.concurrent.ExecutionContext
import java.util.concurrent.Executors

val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(1))

val f = Future[Unit](throw new java.lang.InternalError())(ec)
Run Code Online (Sandbox Code Playgroud)

未来f永远不会完成.f.value永远None.

scala-2.10中有一个已知错误已被修复:

http://mandubian.com/2013/02/22/scala-future-fatal-exception

https://issues.scala-lang.org/browse/SI-7029

我在scala-2.11上.

错误报告中的示例使用NotImplementedErorr,它由Future正确处理,它将完成.但是,如果我在上面的示例中使用InternalError,那么Future永远不会完成.无论我使用ExecutionContext.global,Executors.newSingleThreadExecutor还是Executors.newFixedThreadPool,都是如此.

我可以在未来的身体中抓住Throwable并重新抛出它,并且我知道Future会正确处理它,但这是一个可怕的解决方案.

这是一个已知的问题?预期的行为?我有什么选择可以从我的期货中获得理智的行为?

scala

5
推荐指数
1
解决办法
707
查看次数

标签 统计

apache-spark ×1

c ×1

emacs ×1

ghc ×1

haskell ×1

scala ×1

verilog ×1