2013-06-03 3 views
1

saddle에서 hdf5 스토리지로 작업하려고합니다. 제가 시도한 첫 번째 일은 실제로 프로젝트에서 테스트를 실행하는 것입니다. 불행히도 그들은 그냥 끊지 :hdf5로 안장 작업하기

[info] Loading project definition from /home/folone/workspace/saddle/project 
[info] Set current project to saddle (in build file:/home/folone/workspace/saddle/) 
[saddle]$ project saddle-hdf5 
[info] Set current project to saddle-hdf5 (in build file:/home/folone/workspace/saddle/) 
[saddle-hdf5]$ test 
[warn] Credentials file /home/folone/.ivy2/.credentials does not exist 
[warn] Credentials file /home/folone/.ivy2/.credentials does not exist 
[1] 22192 killed  sbt 

나는 repl와 함께 놀아 보았습니다. 운이없는 : 내 시스템 내 SBT 빌드 설정의 라이브러리 의존성에이 라인에 this package를 설치 한

> console 
[warn] Potentially incompatible versions of dependencies of {file:/home/folone/workspace/ad-ngrams/}adngrams: 
[warn] org.scala-lang: 2.10.1, 2.10.0 
[info] Starting scala interpreter... 
[info] 
Welcome to Scala version 2.10.1 (OpenJDK 64-Bit Server VM, Java 1.7.0_21). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> import org.saddle.io._ 
import org.saddle.io._ 

scala> java.lang.Runtime.getRuntime.loadLibrary("jhdf5") 

scala> val file = H5Store.openFile("/home/folone/workspace/ad-ngrams/temporary_store_ad.h5") 
java.lang.UnsatisfiedLinkError: ncsa.hdf.hdf5lib.HDF5Constants.H5_QUARTER_HADDR_MAX()J 
    at ncsa.hdf.hdf5lib.HDF5Constants.H5_QUARTER_HADDR_MAX(Native Method) 
    at ncsa.hdf.hdf5lib.HDF5Constants.<clinit>(HDF5Constants.java:35) 
    at org.saddle.io.H5Store$.openFile(H5Store.scala:409) 
    at .<init>(<console>:10) 
    at .<clinit>(<console>) 
    at .<init>(<console>:7) 
    at .<clinit>(<console>) 
    at $print(<console>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:734) 
    at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:983) 
    at scala.tools.nsc.interpreter.IMain.loadAndRunReq$1(IMain.scala:573) 
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:604) 
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:568) 
    at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:745) 
    at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:790) 
    at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:702) 
    at scala.tools.nsc.interpreter.ILoop.processLine$1(ILoop.scala:566) 
    at scala.tools.nsc.interpreter.ILoop.innerLoop$1(ILoop.scala:573) 
    at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:576) 
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:867) 
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:822) 
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:822) 
    at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135) 
    at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:822) 
    at scala.tools.nsc.interpreter.ILoop.main(ILoop.scala:889) 
    at xsbt.ConsoleInterface.run(ConsoleInterface.scala:57) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:73) 
    at sbt.compiler.AnalyzingCompiler.console(AnalyzingCompiler.scala:64) 
    at sbt.Console.console0$1(Console.scala:23) 
    at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(Console.scala:24) 
    at sbt.TrapExit$.executeMain$1(TrapExit.scala:33) 
    at sbt.TrapExit$$anon$1.run(TrapExit.scala:42) 


scala> val fid1 = H5Store.createFile("/home/folone/workspace/ad-ngrams/test.h5") 
java.lang.NoClassDefFoundError: Could not initialize class ncsa.hdf.hdf5lib.HDF5Constants 
    at org.saddle.io.H5Store$.createFile(H5Store.scala:433) 
    at .<init>(<console>:10) 
    at .<clinit>(<console>) 
    at .<init>(<console>:7) 
    at .<clinit>(<console>) 
    at $print(<console>) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:734) 
    at scala.tools.nsc.interpreter.IMain$Request.loadAndRun(IMain.scala:983) 
    at scala.tools.nsc.interpreter.IMain.loadAndRunReq$1(IMain.scala:573) 
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:604) 
    at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:568) 
    at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:745) 
    at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:790) 
    at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:702) 
    at scala.tools.nsc.interpreter.ILoop.processLine$1(ILoop.scala:566) 
    at scala.tools.nsc.interpreter.ILoop.innerLoop$1(ILoop.scala:573) 
    at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:576) 
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:867) 
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:822) 
    at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:822) 
    at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:135) 
    at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:822) 
    at scala.tools.nsc.interpreter.ILoop.main(ILoop.scala:889) 
    at xsbt.ConsoleInterface.run(ConsoleInterface.scala:57) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:73) 
    at sbt.compiler.AnalyzingCompiler.console(AnalyzingCompiler.scala:64) 
    at sbt.Console.console0$1(Console.scala:23) 
    at sbt.Console$$anonfun$apply$2$$anonfun$apply$1.apply$mcV$sp(Console.scala:24) 
    at sbt.TrapExit$.executeMain$1(TrapExit.scala:33) 
    at sbt.TrapExit$$anon$1.run(TrapExit.scala:42) 

: 나는 그것이 작동되도록해야합니까 무엇

... 
// Saddle 
"org.scala-saddle" %% "saddle-core" % "1.2.+", 
"org.scala-saddle" %% "saddle-hdf5" % "1.2.+", 
"org.scala-saddle" %% "jhdf5"  % "2.9", 
... 

?

감사합니다. 여기

+0

libjhdf5.jnilib 필요 /). NetCDF 외에도 HDF5도 지원한다고 주장하며 순수한 자바가되어 큰 실수를 저지르기 때문에 C 링커 오류 등이 있습니다. NetCDF 형식의 파일만으로도이 기능을 Scala와 함께 성공적으로 사용했습니다. –

+0

NetCDF는 어느 정도 작동합니다. 예를 들어 Matlab에서 생성 된 HDF5를 읽을 수 없었습니다. – jopasserat

+0

또한 Saddle은 풀 HDF5 랩퍼보다 시리즈 및 프레임을 디스크에 덤프하는 HDF5 드라이버 (v 1.3.4)를 현재 상태로 유지합니다. – jopasserat

답변

2

전체 지침 - 합계에서 http://blog.adamdklein.com/?p=661

: - :

당신은 SBT 실행하면

것은> 콘솔을하고 java.library.path 보면, 당신은 아마 이런 식으로 뭔가를 볼 수 있습니다

lrwxr-xr-x 1 root wheel  78 Jul 8 13:29 [email protected] -> <dir>/libjhdf5.jnilib 

ㅁ :

scala> println(System.getProperty("java.library.path")) 
.:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java 
는 그래서는/usr/lib 디렉토리/자바에 약간의 심볼릭 링크를 추가 ere dir은 hdf5 바이너리 라이브러리의 경로로 대체됩니다. 그냥, HDF5 액세스를 필요 [netCDF의 자바 (http://www.unidata.ucar.edu/software/netcdf-java를 읽어보십시오 안장에 대한

참고 만

+0

이봐, 고마워. 내게'System.getProperty ("java.library.path")'는'/ usr/java/packages/lib/amd64 :/usr/lib64 :/lib64 :/lib :/usr/lib'라고 말합니다. 그리고 나는'/ usr/lib/libjhdf5.so'에 jhdf5를 설치했습니다. 미리 만들어진 바이너리로부터'.so' 파일에 심볼릭 링크를 추가해도 아무런 변화가 없었습니다. '.jnilib' 확장자를 가진 파일도'/ usr/lib' 나 미리 만들어진 바이너리에서는 보이지 않습니다. 또, java.lang.Runtime.getRuntime.loadLibrary ("jhdf5")'를 실행해도 예외는 발생하지 않습니다. – folone

+0

미래의 lurkers를 위해 Adam은 https://groups.google.com/forum/?fromgroups=#!topic/saddle/PrHBmpkGex4에서 Google 그룹스에서이 사실을 알 수있었습니다. – folone