>  기사  >  Java  >  Java용 Jupyter 노트북

Java용 Jupyter 노트북

WBOY
WBOY원래의
2024-09-11 06:31:33796검색

Jupyter Notebook의 강력한 기능

Jupyter Notebook은 원래 데이터 과학자와 엔지니어가 Python 프로그래밍 언어를 사용하여 데이터 작업을 단순화할 수 있도록 개발된 훌륭한 도구입니다. 실제로 노트북의 대화형 특성으로 인해 개발 환경 설정, 컴파일, 패키징 등을 수행하지 않고도 코드 결과를 빠르게 확인하는 데 이상적입니다. 이 기능은 개발 기술이 데이터 조작 전문 지식보다 덜 필수적인 데이터 과학, 기계 학습 및 통계 모델링에 채택하는 데 중요했습니다.

장점

Jupyter Notebook의 장점은 다음과 같습니다

  1. 대화형 개발: 노트북을 사용하면 개발자는 코드를 작은 단위로 작성하고 즉시 테스트하며 결과를 시각화할 수 있습니다. 이 대화형 워크플로우는 더 빠른 반복 및 디버깅을 촉진하며 데이터 탐색, 알고리즘 개발 및 빠른 프로토타이핑에 이상적입니다.
  2. 다양한 시각화: 일반적으로 Notebook은 플롯, 그래프 및 기타 시각적 출력을 인라인으로 표시할 수 있는 강력한 시각화 라이브러리와 통합되어 있습니다.
  3. 문서화와 코드를 함께: 노트북은 실행 가능한 코드와 마크다운 셀을 결합하여 개발자가 코드를 문서화하고 논리 등을 설명할 수 있도록 하여 더 읽기 쉽고 유지 관리하기 쉬운 코드베이스를 만듭니다.
  4. 협업: 노트북을 공유하면 팀 구성원이 개발 환경을 설정하지 않고도 코드를 검토하고 실행할 수 있으므로 특히 비기술적 이해관계자가 포함된 다기능 팀에서 협업이 더 쉬워집니다.
  5. 재현성: 노트북을 위에서 아래로 다시 실행할 수 있으므로 모든 분석이나 테스트를 일관되게 재현할 수 있습니다. 이는 디버깅, 테스트 또는 결과 제시에 매우 중요합니다.

요약하면

Jupyter Notebook은 초기 탐색부터 프로덕션 준비 코드까지 개발 프로세스를 간소화하여 유연성과 실시간 피드백을 제공합니다.

Python 장벽을 허물다

Jupyter 노트북이 제공하는 이점을 고려하면 소프트웨어 개발자가 이러한 노트북 접근 방식을 사용하여 프로젝트를 위한 사용 사례 테스트를 개발하거나 유용한 인터랙티브 방법.

질문은 다음과 같습니다.

PYTHON❓ 이외의 프로그래밍 언어에 Jupyter 노트북을 사용할 수 있나요?

답은

YES?입니다.

주피터 아키텍처

Jupyter 도구는

커널 개념을 통해 여러 프로그래밍 언어를 지원하도록 설계되었습니다. 아래 다이어그램을 참조하세요.

Jupyter Notebook for Java

커널은 Jupyter 노트북 서버가 노트북 문서(.ipynb) 내부에서 사용자가 작성한 코드 블록을 평가하는 방식이므로 원하는 프로그래밍 언어의 코드를 평가할 수 있는 커널만 있으면 충분합니다. Jupyter 노트북에서 지원됩니다.

물론 Jupyter 커널이 지원할 수 있는 모든 잠재적인 프로그래밍 언어는 REPL(읽기-평가-인쇄 루프) 기능을 지원해야 한다고 추론하기 쉽습니다.

질문은 다음과 같습니다.

PYTHON ONE❓ 외에 JUPYTER 커널이 있나요?

답은

? 입니다.

최근에는 Langchain에서 에이전트 및 다중 에이전트 워크플로를 생성하는 데 사용되는 Javascript 라이브러리인 더 유명한 Langgraph.js를 Java로 구현한 Langgraph4J 작업을 진행하고 있습니다. 흥미로운 점은 [Langchain.js]가 DENO Jupiter Kernel로 구동되는 Javascript Jupyter 노트북을 사용하여 How-To를 구현하고 문서화한다는 것입니다.

그래서 Java에서 동일한 접근 방식을 어떻게 사용(또는 시뮬레이션할 수 있는지)하는 딜레마에 직면했고 별 희망 없이 JDK 9 버전부터 다음이 도입되었다는 점을 고려하여 Java를 지원하는 Jupyter Kernel을 찾기 시작했습니다. Java용 REPL을 활성화한 JShell입니다.

자바 주피터 커널

약간의 조사(그리고 DIY 구현에 뛰어들겠다는 이상한 생각) 끝에 Java ?를 지원하는 Jupyter 커널인 rapaio-jupyter-kernel에 도달했습니다. 프로젝트 내용은 다음과 같습니다.

JShell 기반 Java 언어용 Jupyter 커널입니다. Jupyter 메시지 사양 버전 5.4를 구현하며 Java = 22가 필요합니다.

정말 놀랍습니다. 사용하기 시작했는데 와우!?. 몇 가지 기능을 살펴보세요. 아래에 가장 대표적인 기능을 요약했습니다.

Java Jupyter 노트북 기능


일반 Java를 작성할 수 있습니다.

var result = 2 + 2;
result
4

// including classes
record Complex(double a, double b) {
    public Complex add(Complex c) {
        return new Complex(a+c.a, b+c.b);
    }
}
Complex x = new Complex(10,20);
x.add(new Complex(1,1))
복합[a=11.0, b=21.0]

// methods can also be implemented
int add(int a, int b) { return a+b; }
add(2,3)
5

Magic commands

Besides Java code, a cell can contain special commands implemented by the kernel. These are called magic code and there are two types: magic lines and magic cells.
Magic lines are lines which are prefixed with %. After the prefix it is followed by the magic command and the optional parameters. Below is an example of magic line:

// magic line which asks JShell to list the types defined in this notebook in this moment
%jshell /types

| record Complex

Magic commands interpolation

Sometimes there is a need to run a magic command in a more dynamic way. This can be done using magic interpolation.
Magic interpolation is the interpolation of marked content which starts with \{ and ends with }. Any content decorated with those markers is evaluated in jshell and the result is transformed in a String which replaces the decorated content in the magic command.

String version = "1.0.2";

 

%dependency /add com.github.javafaker:javafaker:\{version}

Adding dependency com.github.javafaker:javafaker:1.0.2

Dependency management ?

You can add dependencies using %dependency /add and after adding all dependencies you can call %dependency /resolve

%dependency /add com.github.javafaker:javafaker:1.0.2
%dependency /resolve

Adding dependency com.github.javafaker:javafaker:1.0.2
Solving dependencies
Resolved artifacts count: 5
Add to classpath: /home/ati/work/rapaio-jupyter-kernel/target/mima_cache/com/github/javafaker/javafaker/1.0.2/javafaker-1.0.2.jar
Add to classpath: /home/ati/work/rapaio-jupyter-kernel/target/mima_cache/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar
Add to classpath: /home/ati/work/rapaio-jupyter-kernel/target/mima_cache/org/yaml/snakeyaml/1.23/snakeyaml-1.23-android.jar
Add to classpath: /home/ati/work/rapaio-jupyter-kernel/target/mima_cache/com/github/mifmif/generex/1.0.2/generex-1.0.2.jar
Add to classpath: /home/ati/work/rapaio-jupyter-kernel/target/mima_cache/dk/brics/automaton/automaton/1.11-8/automaton-1.11-8.jar

When added you can import and use the dependency.

import com.github.javafaker.Faker;
var faker = new Faker();
faker.name().fullName()

Hayley Anderson

Resolving conflict dependencies

You there are conflicts you can manage them with optional. Let's take an example which have conflicts:

%dependency /add com.google.guava:guava:20.0 --optional
%dependency /add com.google.inject:guice:4.2.2
%dependency /add com.google.guava:guava:25.1-android
%dependency /resolve

Help on magic commands

The magic %help provides more examples and guidance.

JShell commands

Some JShell commands are implemented. For example you can inspect which variables are defined

%jshell /vars

or the types you defined in this session

%jshell /types

Execute bash commands

You can execute bash scripting commands. Here we display the java version number.

%%bash
java --version

openjdk 22.0.2 2024-07-16
OpenJDK Runtime Environment Corretto-22.0.2.9.1 (build 22.0.2+9-FR)
OpenJDK 64-Bit Server VM Corretto-22.0.2.9.1 (build 22.0.2+9-FR, mixed mode, sharing)

You can even define variables. In fact all the lines below cell magic marker are executed as a bash script.

%%bash
name="John"
echo "Hello $name"

Hello John

Show an image for immediate inspection

%image https://www.google.com/logos/doodles/2024/paris-games-sailing-6753651837110529.4-law.gif

Jupyter Notebook for Java

Display data

Jupyter notebooks uses outputs to display objects of various types. By default when an object is returned as the result of the last code operation, that result is displayed.
The object which is displayed can be anything. If the object has a display handler registered, than that renderer is used to transform the object into a displayable content. If there is no registered display handler than the object is transformed into a string and that will be displayed.
Previously we used magic commands to display an image. However for BufferedImages there is a registered handler and if you obtain an instance of a BufferedImage it will be displayed properly.

import javax.imageio.*;
display(ImageIO.read(new URL("https://www.google.com/logos/doodles/2024/paris-games-sailing-6753651837110529.4-law.gif")));

Displayed data has a mime type. You can use that to describe how the object should be interpreted. For example we display a markdown snippet and we direct the output interpretation of the snippet through MIME type.

display("text/markdown", "Markdown *test* **snippet**:\n* bullet 1\n* bullet 2")

Markdown test snippet:

  • bullet 1
  • bullet 2

display command returns an id which identifies the piece of output from the notebook which handles the display. Notice that we captured the id of the display. This id can be used to update the same display with a different content. For example we can update the content of that display with a html snippet, using the MIME type for interpretation.

String id = display("text/markdown", "Markdown *test* **snippet**:\n* bullet 1\n* bullet 2");

 

updateDisplay(id, "text/html", "Html <i>test</i> <b>snippet</b>:<p><ulist><li>bullet 1</li><li>bullet 2</li></ulist></p>")

A Java object is displayed as a String using Objects.toString. As such, if the object has an implementation of toString, that method will be called.

new Complex(10,Math.PI);

Complex[a=10.0, b=3.141592653589793]


Abschluss

Die Vielseitigkeit von Jupyter-Notebooks geht über Python hinaus, die Integration von Kerneln wie rapaio-jupyter-kernel eröffnet Java-Entwicklern neue Wege. Meine bevorzugte Funktion ist die Möglichkeit, HOW-TOs interaktiv zu schreiben und sie kontextbezogen zu dokumentieren, aber es gibt eine Reihe potenzieller Anwendungsfälle und es liegt an Ihnen, sie zu erkunden, also lassen Sie es uns erkunden und lassen Sie es mich wissen.

Ich hoffe, dass dieses Wissen hilfreich sein wird. In der Zwischenzeit viel Spaß beim Programmieren! ? 

? Meine Experimente mit Java-Notebooks finden auf Github statt? 


Ursprünglich veröffentlicht unter https://bsorrentino.github.io am 6. September 2024.

위 내용은 Java용 Jupyter 노트북의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.