CINXE.COM
Apache Zeppelin 0.10.1 Documentation: R Interpreter for Apache Zeppelin
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Apache Zeppelin 0.10.1 Documentation: R Interpreter for Apache Zeppelin</title> <meta name="description" content="R is a free software environment for statistical computing and graphics."> <meta name="author" content="The Apache Software Foundation"> <!-- Enable responsive viewport --> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- Le HTML5 shim, for IE6-8 support of HTML elements --> <!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"> <!-- Le styles --> <link href="/docs/0.10.1/assets/themes/zeppelin/bootstrap/css/bootstrap.css" rel="stylesheet"> <link href="/docs/0.10.1/assets/themes/zeppelin/css/style.css?body=1" rel="stylesheet" type="text/css"> <link href="/docs/0.10.1/assets/themes/zeppelin/css/syntax.css" rel="stylesheet" type="text/css" media="screen" /> <!-- Le fav and touch icons --> <!-- Update these with your own images <link rel="shortcut icon" href="images/favicon.ico"> <link rel="apple-touch-icon" href="images/apple-touch-icon.png"> <link rel="apple-touch-icon" sizes="72x72" href="images/apple-touch-icon-72x72.png"> <link rel="apple-touch-icon" sizes="114x114" href="images/apple-touch-icon-114x114.png"> --> <!-- Js --> <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script> <script src="/docs/0.10.1/assets/themes/zeppelin/bootstrap/js/bootstrap.min.js"></script> <script src="/docs/0.10.1/assets/themes/zeppelin/js/docs.js"></script> <script src="/docs/0.10.1/assets/themes/zeppelin/js/anchor.min.js"></script> <script src="/docs/0.10.1/assets/themes/zeppelin/js/toc.js"></script> <script src="/docs/0.10.1/assets/themes/zeppelin/js/lunr.min.js"></script> <script src="/docs/0.10.1/assets/themes/zeppelin/js/search.js"></script> <!-- atom & rss feed --> <link href="/docs/0.10.1/atom.xml" type="application/atom+xml" rel="alternate" title="Sitewide ATOM Feed"> <link href="/docs/0.10.1/rss.xml" type="application/rss+xml" rel="alternate" title="Sitewide RSS Feed"> </head> <body> <div id="menu" class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <div class="container navbar-container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <div class="navbar-brand"> <a class="navbar-brand-main" href="http://zeppelin.apache.org"> <img src="/docs/0.10.1/assets/themes/zeppelin/img/zeppelin_logo.png" width="50" style="margin-top: -2px;" alt="I'm zeppelin"> <span style="margin-left: 5px; font-size: 27px;">Zeppelin</span> <a class="navbar-brand-version" href="/docs/0.10.1" style="font-size: 15px; color: white;"> 0.10.1 </a> </a> </div> </div> <nav class="navbar-collapse collapse" role="navigation"> <ul class="nav navbar-nav"> <li> <a href="#" data-toggle="dropdown" class="dropdown-toggle">Quick Start <b class="caret"></b></a> <ul class="dropdown-menu"> <li class="title"><span>Getting Started</span></li> <li><a href="/docs/0.10.1/quickstart/install.html">Install</a></li> <li><a href="/docs/0.10.1/quickstart/explore_ui.html">Explore UI</a></li> <li><a href="/docs/0.10.1/quickstart/tutorial.html">Tutorial</a></li> <li role="separator" class="divider"></li> <li class="title"><span>Run Mode</span></li> <li><a href="/docs/0.10.1/quickstart/kubernetes.html">Kubernetes</a></li> <li><a href="/docs/0.10.1/quickstart/docker.html">Docker</a></li> <li><a href="/docs/0.10.1/quickstart/yarn.html">Yarn</a></li> <li role="separator" class="divider"></li> <li><a href="/docs/0.10.1/quickstart/spark_with_zeppelin.html">Spark with Zeppelin</a></li> <li><a href="/docs/0.10.1/quickstart/flink_with_zeppelin.html">Flink with Zeppelin</a></li> <li><a href="/docs/0.10.1/quickstart/sql_with_zeppelin.html">SQL with Zeppelin</a></li> <li><a href="/docs/0.10.1/quickstart/python_with_zeppelin.html">Python with Zeppelin</a></li> <li><a href="/docs/0.10.1/quickstart/r_with_zeppelin.html">R with Zeppelin</a></li> </ul> </li> <li> <a href="#" data-toggle="dropdown" class="dropdown-toggle">Usage<b class="caret"></b></a> <ul class="dropdown-menu scrollable-menu"> <li class="title"><span>Dynamic Form</span></li> <li><a href="/docs/0.10.1/usage/dynamic_form/intro.html">What is Dynamic Form?</a></li> <li role="separator" class="divider"></li> <li class="title"><span>Display System</span></li> <li><a href="/docs/0.10.1/usage/display_system/basic.html#text">Text Display</a></li> <li><a href="/docs/0.10.1/usage/display_system/basic.html#html">HTML Display</a></li> <li><a href="/docs/0.10.1/usage/display_system/basic.html#table">Table Display</a></li> <li><a href="/docs/0.10.1/usage/display_system/basic.html#network">Network Display</a></li> <li><a href="/docs/0.10.1/usage/display_system/angular_backend.html">Angular Display using Backend API</a></li> <li><a href="/docs/0.10.1/usage/display_system/angular_frontend.html">Angular Display using Frontend API</a></li> <li role="separator" class="divider"></li> <li class="title"><span>Interpreter</span></li> <li><a href="/docs/0.10.1/usage/interpreter/overview.html">Overview</a></li> <li><a href="/docs/0.10.1/usage/interpreter/interpreter_binding_mode.html">Interpreter Binding Mode</a></li> <li><a href="/docs/0.10.1/usage/interpreter/user_impersonation.html">User Impersonation</a></li> <li><a href="/docs/0.10.1/usage/interpreter/dependency_management.html">Dependency Management</a></li> <li><a href="/docs/0.10.1/usage/interpreter/installation.html">Installing Interpreters</a></li> <!--<li><a href="/docs/0.10.1/usage/interpreter/dynamic_loading.html">Dynamic Interpreter Loading (Experimental)</a></li>--> <li><a href="/docs/0.10.1/usage/interpreter/execution_hooks.html">Execution Hooks (Experimental)</a></li> <li role="separator" class="divider"></li> <li class="title"><span>Other Features</span></li> <li><a href="/docs/0.10.1/usage/other_features/publishing_paragraphs.html">Publishing Paragraphs</a></li> <li><a href="/docs/0.10.1/usage/other_features/personalized_mode.html">Personalized Mode</a></li> <li><a href="/docs/0.10.1/usage/other_features/customizing_homepage.html">Customizing Zeppelin Homepage</a></li> <li><a href="/docs/0.10.1/usage/other_features/notebook_actions.html">Notebook Actions</a></li> <li><a href="/docs/0.10.1/usage/other_features/cron_scheduler.html">Cron Scheduler</a></li> <li><a href="/docs/0.10.1/usage/other_features/zeppelin_context.html">Zeppelin Context</a></li> <li role="separator" class="divider"></li> <li class="title"><span>REST API</span></li> <li><a href="/docs/0.10.1/usage/rest_api/interpreter.html">Interpreter API</a></li> <li><a href="/docs/0.10.1/usage/rest_api/zeppelin_server.html">Zeppelin Server API</a></li> <li><a href="/docs/0.10.1/usage/rest_api/notebook.html">Notebook API</a></li> <li><a href="/docs/0.10.1/usage/rest_api/notebook_repository.html">Notebook Repository API</a></li> <li><a href="/docs/0.10.1/usage/rest_api/configuration.html">Configuration API</a></li> <li><a href="/docs/0.10.1/usage/rest_api/credential.html">Credential API</a></li> <li><a href="/docs/0.10.1/usage/rest_api/helium.html">Helium API</a></li> <li class="title"><span>Zeppelin SDK</span></li> <li><a href="/docs/0.10.1/usage/zeppelin_sdk/client_api.html">Client API</a></li> <li><a href="/docs/0.10.1/usage/zeppelin_sdk/session_api.html">Session API</a></li> </ul> </li> <li> <a href="#" data-toggle="dropdown" class="dropdown-toggle">Setup<b class="caret"></b></a> <ul class="dropdown-menu scrollable-menu"> <li class="title"><span>Basics</span></li> <li><a href="/docs/0.10.1/setup/basics/how_to_build.html">How to Build Zeppelin</a></li> <li><a href="/docs/0.10.1/setup/basics/hadoop_integration.html">Hadoop Integration</a></li> <li><a href="/docs/0.10.1/setup/basics/multi_user_support.html">Multi-user Support</a></li> <li role="separator" class="divider"></li> <li class="title"><span>Deployment</span></li> <!--<li><a href="/docs/0.10.1/setup/deployment/docker.html">Docker Image for Zeppelin</a></li>--> <li><a href="/docs/0.10.1/setup/deployment/spark_cluster_mode.html#spark-standalone-mode">Spark Cluster Mode: Standalone</a></li> <li><a href="/docs/0.10.1/setup/deployment/spark_cluster_mode.html#spark-on-yarn-mode">Spark Cluster Mode: YARN</a></li> <li><a href="/docs/0.10.1/setup/deployment/spark_cluster_mode.html#spark-on-mesos-mode">Spark Cluster Mode: Mesos</a></li> <li><a href="/docs/0.10.1/setup/deployment/flink_and_spark_cluster.html">Zeppelin with Flink, Spark Cluster</a></li> <li><a href="/docs/0.10.1/setup/deployment/cdh.html">Zeppelin on CDH</a></li> <li><a href="/docs/0.10.1/setup/deployment/virtual_machine.html">Zeppelin on VM: Vagrant</a></li> <li role="separator" class="divider"></li> <li class="title"><span>Security</span></li> <li><a href="/docs/0.10.1/setup/security/authentication_nginx.html">HTTP Basic Auth using NGINX</a></li> <li><a href="/docs/0.10.1/setup/security/shiro_authentication.html">Shiro Authentication</a></li> <li><a href="/docs/0.10.1/setup/security/notebook_authorization.html">Notebook Authorization</a></li> <li><a href="/docs/0.10.1/setup/security/datasource_authorization.html">Data Source Authorization</a></li> <li><a href="/docs/0.10.1/setup/security/http_security_headers.html">HTTP Security Headers</a></li> <li role="separator" class="divider"></li> <li class="title"><span>Notebook Storage</span></li> <li><a href="/docs/0.10.1/setup/storage/storage.html#notebook-storage-in-local-git-repository">Git Storage</a></li> <li><a href="/docs/0.10.1/setup/storage/storage.html#notebook-storage-in-s3">S3 Storage</a></li> <li><a href="/docs/0.10.1/setup/storage/storage.html#notebook-storage-in-azure">Azure Storage</a></li> <li><a href="/docs/0.10.1/setup/storage/storage.html#notebook-storage-in-oss">OSS Storage</a></li> <li><a href="/docs/0.10.1/setup/storage/storage.html#notebook-storage-in-zeppelinhub">ZeppelinHub Storage</a></li> <li><a href="/docs/0.10.1/setup/storage/storage.html#notebook-storage-in-mongodb">MongoDB Storage</a></li> <li role="separator" class="divider"></li> <li class="title"><span>Operation</span></li> <li><a href="/docs/0.10.1/setup/operation/configuration.html">Configuration</a></li> <li><a href="/docs/0.10.1/setup/operation/proxy_setting.html">Proxy Setting</a></li> <li><a href="/docs/0.10.1/setup/operation/upgrading.html">Upgrading</a></li> <li><a href="/docs/0.10.1/setup/operation/trouble_shooting.html">Trouble Shooting</a></li> </ul> </li> <li> <a href="#" data-toggle="dropdown" class="dropdown-toggle">Interpreter <b class="caret"></b></a> <ul class="dropdown-menu scrollable-menu"> <li class="title"><span>Interpreters</span></li> <li><a href="/docs/0.10.1/usage/interpreter/overview.html">Overview</a></li> <li role="separator" class="divider"></li> <li><a href="/docs/0.10.1/interpreter/spark.html">Spark</a></li> <li><a href="/docs/0.10.1/interpreter/flink.html">Flink</a></li> <li><a href="/docs/0.10.1/interpreter/jdbc.html">JDBC</a></li> <li><a href="/docs/0.10.1/interpreter/python.html">Python</a></li> <li><a href="/docs/0.10.1/interpreter/r.html">R</a></li> <li role="separator" class="divider"></li> <li><a href="/docs/0.10.1/interpreter/alluxio.html">Alluxio</a></li> <li><a href="/docs/0.10.1/interpreter/beam.html">Beam</a></li> <li><a href="/docs/0.10.1/interpreter/bigquery.html">BigQuery</a></li> <li><a href="/docs/0.10.1/interpreter/cassandra.html">Cassandra</a></li> <li><a href="/docs/0.10.1/interpreter/elasticsearch.html">Elasticsearch</a></li> <li><a href="/docs/0.10.1/interpreter/geode.html">Geode</a></li> <li><a href="/docs/0.10.1/interpreter/groovy.html">Groovy</a></li> <li><a href="/docs/0.10.1/interpreter/hazelcastjet.html">Hazelcast Jet</a></li> <li><a href="/docs/0.10.1/interpreter/hbase.html">HBase</a></li> <li><a href="/docs/0.10.1/interpreter/hdfs.html">HDFS</a></li> <li><a href="/docs/0.10.1/interpreter/hive.html">Hive</a></li> <li><a href="/docs/0.10.1/interpreter/ignite.html">Ignite</a></li> <li><a href="/docs/0.10.1/interpreter/influxdb.html">influxDB</a></li> <li><a href="/docs/0.10.1/interpreter/java.html">Java</a></li> <li><a href="/docs/0.10.1/interpreter/jupyter.html">Jupyter</a></li> <li><a href="/docs/0.10.1/interpreter/kotlin.html">Kotlin</a></li> <li><a href="/docs/0.10.1/interpreter/ksql.html">KSQL</a></li> <li><a href="/docs/0.10.1/interpreter/kylin.html">Kylin</a></li> <li><a href="/docs/0.10.1/interpreter/lens.html">Lens</a></li> <li><a href="/docs/0.10.1/interpreter/livy.html">Livy</a></li> <li><a href="/docs/0.10.1/interpreter/mahout.html">Mahout</a></li> <li><a href="/docs/0.10.1/interpreter/markdown.html">Markdown</a></li> <li><a href="/docs/0.10.1/interpreter/mongodb.html">MongoDB</a></li> <li><a href="/docs/0.10.1/interpreter/neo4j.html">Neo4j</a></li> <li><a href="/docs/0.10.1/interpreter/pig.html">Pig</a></li> <li><a href="/docs/0.10.1/interpreter/postgresql.html">Postgresql, HAWQ</a></li> <li><a href="/docs/0.10.1/interpreter/sap.html">SAP</a></li> <li><a href="/docs/0.10.1/interpreter/scalding.html">Scalding</a></li> <li><a href="/docs/0.10.1/interpreter/scio.html">Scio</a></li> <li><a href="/docs/0.10.1/interpreter/shell.html">Shell</a></li> <li><a href="/docs/0.10.1/interpreter/sparql.html">Sparql</a></li> <li><a href="/docs/0.10.1/interpreter/submarine.html">Submarine</a></li> </ul> </li> <li> <a href="#" data-toggle="dropdown" class="dropdown-toggle">More<b class="caret"></b></a> <ul class="dropdown-menu scrollable-menu" style="right: 0; left: auto;"> <li class="title"><span>Extending Zeppelin</span></li> <li><a href="/docs/0.10.1/development/writing_zeppelin_interpreter.html">Writing Zeppelin Interpreter</a></li> <li role="separator" class="divider"></li> <li class="title"><span>Helium (Experimental)</span></li> <li><a href="/docs/0.10.1/development/helium/overview.html">Overview</a></li> <li><a href="/docs/0.10.1/development/helium/writing_application.html">Writing Helium Application</a></li> <li><a href="/docs/0.10.1/development/helium/writing_spell.html">Writing Helium Spell</a></li> <li><a href="/docs/0.10.1/development/helium/writing_visualization_basic.html">Writing Helium Visualization: Basics</a></li> <li><a href="/docs/0.10.1/development/helium/writing_visualization_transformation.html">Writing Helium Visualization: Transformation</a></li> <li role="separator" class="divider"></li> <li class="title"><span>Contributing to Zeppelin</span></li> <li><a href="/docs/0.10.1/setup/basics/how_to_build.html">How to Build Zeppelin</a></li> <li><a href="/docs/0.10.1/development/contribution/useful_developer_tools.html">Useful Developer Tools</a></li> <li><a href="/docs/0.10.1/development/contribution/how_to_contribute_code.html">How to Contribute (code)</a></li> <li><a href="/docs/0.10.1/development/contribution/how_to_contribute_website.html">How to Contribute (website)</a></li> <li role="separator" class="divider"></li> <li class="title"><span>External Resources</span></li> <li><a target="_blank" rel="noopener noreferrer" href="https://zeppelin.apache.org/community.html">Mailing List</a></li> <li><a target="_blank" rel="noopener noreferrer" href="https://cwiki.apache.org/confluence/display/ZEPPELIN/Zeppelin+Home">Apache Zeppelin Wiki</a></li> <li><a target="_blank" rel="noopener noreferrer" href="http://stackoverflow.com/questions/tagged/apache-zeppelin">Stackoverflow Questions about Zeppelin</a></li> </ul> </li> <li> <a href="/docs/0.10.1/search.html" class="nav-search-link"> <span class="fa fa-search nav-search-icon"></span> </a> </li> </ul> </nav><!--/.navbar-collapse --> </div> </div> <div class="content"> <!--<div class="hero-unit R Interpreter for Apache Zeppelin"> <h1></h1> </div> --> <div class="row"> <div class="col-md-12"> <!-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <h1>R Interpreter for Apache Zeppelin</h1> <div id="toc"></div> <h2>Overview</h2> <p><a href="https://www.r-project.org">R</a> is a free software environment for statistical computing and graphics.</p> <p>To run R code and visualize plots in Apache Zeppelin, you will need R on your zeppelin server node (or your dev laptop).</p> <ul> <li>For Centos: <code>yum install R R-devel libcurl-devel openssl-devel</code></li> <li>For Ubuntu: <code>apt-get install r-base</code></li> </ul> <p>Validate your installation with a simple R command:</p> <div class="highlight"><pre><code class="text language-text" data-lang="text">R -e "print(1+1)" </code></pre></div> <p>To enjoy plots, install additional libraries with:</p> <ul> <li><p>devtools with </p> <div class="highlight"><pre><code class="bash language-bash" data-lang="bash">R -e <span class="s2">"install.packages('devtools', repos = 'http://cran.us.r-project.org')"</span> </code></pre></div></li> <li><p>knitr with </p> <div class="highlight"><pre><code class="bash language-bash" data-lang="bash">R -e <span class="s2">"install.packages('knitr', repos = 'http://cran.us.r-project.org')"</span> </code></pre></div></li> <li><p>ggplot2 with</p> <div class="highlight"><pre><code class="bash language-bash" data-lang="bash">R -e <span class="s2">"install.packages('ggplot2', repos = 'http://cran.us.r-project.org')"</span> </code></pre></div></li> <li><p>Other visualization libraries: </p> <div class="highlight"><pre><code class="bash language-bash" data-lang="bash">R -e <span class="s2">"install.packages(c('devtools','mplot', 'googleVis'), repos = 'http://cran.us.r-project.org'); </span> <span class="s2">require(devtools); install_github('ramnathv/rCharts')"</span> </code></pre></div></li> </ul> <p>We recommend you to also install the following optional R libraries for happy data analytics:</p> <ul> <li>glmnet</li> <li>pROC</li> <li>data.table</li> <li>caret</li> <li>sqldf</li> <li>wordcloud</li> </ul> <h2>Supported Interpreters</h2> <p>Zeppelin supports R language in 3 interpreters</p> <table class="table-configuration"> <tr> <th>Name</th> <th>Class</th> <th>Description</th> </tr> <tr> <td>%r.r</td> <td>RInterpreter</td> <td>Vanilla r interpreter, with least dependencies, only R environment and knitr are required. It is always recommended to use the fully qualified interpreter name <code>%r.r</code>, because <code>%r</code> is ambiguous, it could mean <code>%spark.r</code> when current note's default interpreter is <code>%spark</code> and <code>%r.r</code> when the default interpreter is <code>%r</code></td> </tr> <tr> <td>%r.ir</td> <td>IRInterpreter</td> <td>Provide more fancy R runtime via [IRKernel](https://github.com/IRkernel/IRkernel), almost the same experience like using R in Jupyter. It requires more things, but is the recommended interpreter for using R in Zeppelin.</td> </tr> <tr> <td>%r.shiny</td> <td>ShinyInterpreter</td> <td>Run Shiny app in Zeppelin</td> </tr> </table> <p>If you want to use R with Spark, it is almost the same via <code>%spark.r</code>, <code>%spark.ir</code> & <code>%spark.shiny</code> . You can refer Spark interpreter docs for more details.</p> <h2>Configuration</h2> <table class="table-configuration"> <tr> <th>Property</th> <th>Default</th> <th>Description</th> </tr> <tr> <td>zeppelin.R.cmd</td> <td>R</td> <td>Path of the installed R binary. You should set this property explicitly if R is not in your <code>$PATH</code>(example: /usr/bin/R). </td> </tr> <tr> <td>zeppelin.R.knitr</td> <td>true</td> <td>Whether to use knitr or not. It is recommended to install [knitr](https://yihui.org/knitr/)</td> </tr> <tr> <td>zeppelin.R.image.width</td> <td>100%</td> <td>Image width of R plotting</td> </tr> <tr> <td>zeppelin.R.shiny.iframe_width</td> <td>100%</td> <td>IFrame width of Shiny App</td> </tr> <tr> <td>zeppelin.R.shiny.iframe_height</td> <td>500px</td> <td>IFrame height of Shiny App</td> </tr> <tr> <td>zeppelin.R.shiny.portRange</td> <td>:</td> <td>Shiny app would launch a web app at some port, this property is to specify the portRange via format 'start':'end', e.g. '5000:5001'. By default it is ':' which means any port.</td> </tr> <tr> <td>zeppelin.R.maxResult</td> <td>1000</td> <td>Max number of dataframe rows to display when using z.show</td> </tr> </table> <h2>Play R in Zeppelin docker</h2> <p>For beginner, we would suggest you to play R in Zeppelin docker first. In the Zeppelin docker image, we have already installed R and lots of useful R libraries including IRKernel's prerequisites, so <code>%r.ir</code> is available.</p> <p>Without any extra configuration, you can run most of tutorial notes under folder <code>R Tutorial</code> directly.</p> <div class="highlight"><pre><code class="text language-text" data-lang="text">docker run -u $(id -u) -p 8080:8080 -p:6789:6789 --rm --name zeppelin apache/zeppelin:0.10.0 </code></pre></div> <p>After running the above command, you can open <code>http://localhost:8080</code> to play R in Zeppelin. The port <code>6789</code> exposed in the above command is for R shiny app. You need to make the following 2 interpreter properties to enable shiny app accessible as iframe in Zeppelin docker container. </p> <ul> <li><code>zeppelin.R.shiny.portRange</code> to be <code>6789:6789</code></li> <li>Set <code>ZEPPELIN_LOCAL_IP</code> to be <code>0.0.0.0</code></li> </ul> <p><img class="img-responsive" src="/docs/0.10.1/assets/themes/zeppelin/img/docs-img/r_shiny_app.gif" width="800px"/></p> <h2>Interpreter binding mode</h2> <p>The default <a href="../usage/interpreter/interpreter_binding_mode.html">interpreter binding mode</a> is <code>globally shared</code>. That means all notes share the same R interpreter. So we would recommend you to ues <code>isolated per note</code> which means each note has own R interpreter without affecting each other. But it may run out of your machine resource if too many R interpreters are created. You can <a href="../interpreter/r.html#run-r-in-yarn-cluster">run R in yarn mode</a> to avoid this problem. </p> <h2>How to use R Interpreter</h2> <p>There are two different implementations of R interpreters: <code>%r.r</code> and <code>%r.ir</code>.</p> <ul> <li>Vanilla R Interpreter(<code>%r.r</code>) behaves like an ordinary REPL and use SparkR to communicate between R process and JVM process. It requires <code>knitr</code> to be installed.</li> <li>IRKernel R Interpreter(<code>%r.ir</code>) behaves like using IRKernel in Jupyter notebook. It is based on <a href="jupyter.html">jupyter interpreter</a>. Besides jupyter interpreter's prerequisites, <a href="https://github.com/IRkernel/IRkernel">IRkernel</a> needs to be installed as well. </li> </ul> <p>Take a look at the tutorial note <code>R Tutorial/1. R Basics</code> for how to write R code in Zeppelin.</p> <h3>R basic expressions</h3> <p>R basic expressions are supported in both <code>%r.r</code> and <code>%r.ir</code>.</p> <p><img class="img-responsive" src="/docs/0.10.1/assets/themes/zeppelin/img/docs-img/r_basic.png" width="800px"/></p> <h3>R base plotting</h3> <p>R base plotting is supported in both <code>%r.r</code> and <code>%r.ir</code>.</p> <p><img class="img-responsive" src="/docs/0.10.1/assets/themes/zeppelin/img/docs-img/r_plotting.png" width="800px"/></p> <h3>Other plotting</h3> <p>Besides R base plotting, you can use other visualization libraries in both <code>%r.r</code> and <code>%r.ir</code>, e.g. <code>ggplot</code> and <code>googleVis</code> </p> <p><img class="img-responsive" src="/docs/0.10.1/assets/themes/zeppelin/img/docs-img/r_ggplot.png" width="800px"/></p> <p><img class="img-responsive" src="/docs/0.10.1/assets/themes/zeppelin/img/docs-img/r_googlevis.png" width="800px"/></p> <h3>z.show</h3> <p><code>z.show()</code> is only available in <code>%r.ir</code> to visualize R dataframe, e.g.</p> <p><img class="img-responsive" src="/docs/0.10.1/assets/themes/zeppelin/img/docs-img/r_zshow.png" width="800px"/></p> <p>By default, <code>z.show</code> would only display 1000 rows, you can specify the maxRows via <code>z.show(df, maxRows=2000)</code></p> <h2>Make Shiny App in Zeppelin</h2> <p><a href="https://shiny.rstudio.com/tutorial/">Shiny</a> is an R package that makes it easy to build interactive web applications (apps) straight from R. <code>%r.shiny</code> is used for developing R shiny app in Zeppelin notebook. It only works when IRKernel Interpreter(<code>%r.ir</code>) is enabled. For developing one Shiny App in Zeppelin, you need to write at least 3 paragraphs (server type paragraph, ui type paragraph and run type paragraph)</p> <ul> <li>Server type R shiny paragraph</li> </ul> <div class="highlight"><pre><code class="r language-r" data-lang="r">%r.shiny<span class="p">(</span>type<span class="o">=</span>server<span class="p">)</span> <span class="c1"># Define server logic to summarize and view selected dataset ----</span> server <span class="o"><-</span> <span class="kr">function</span><span class="p">(</span>input<span class="p">,</span> output<span class="p">)</span> <span class="p">{</span> <span class="c1"># Return the requested dataset ----</span> datasetInput <span class="o"><-</span> reactive<span class="p">({</span> <span class="kr">switch</span><span class="p">(</span>input<span class="o">$</span>dataset<span class="p">,</span> <span class="s">"rock"</span> <span class="o">=</span> rock<span class="p">,</span> <span class="s">"pressure"</span> <span class="o">=</span> pressure<span class="p">,</span> <span class="s">"cars"</span> <span class="o">=</span> cars<span class="p">)</span> <span class="p">})</span> <span class="c1"># Generate a summary of the dataset ----</span> output<span class="o">$</span>summary <span class="o"><-</span> renderPrint<span class="p">({</span> dataset <span class="o"><-</span> datasetInput<span class="p">()</span> summary<span class="p">(</span>dataset<span class="p">)</span> <span class="p">})</span> <span class="c1"># Show the first "n" observations ----</span> output<span class="o">$</span>view <span class="o"><-</span> renderTable<span class="p">({</span> head<span class="p">(</span>datasetInput<span class="p">(),</span> n <span class="o">=</span> input<span class="o">$</span>obs<span class="p">)</span> <span class="p">})</span> <span class="p">}</span> </code></pre></div> <ul> <li>UI type R shiny paragraph</li> </ul> <div class="highlight"><pre><code class="r language-r" data-lang="r">%r.shiny<span class="p">(</span>type<span class="o">=</span>ui<span class="p">)</span> <span class="c1"># Define UI for dataset viewer app ----</span> ui <span class="o"><-</span> fluidPage<span class="p">(</span> <span class="c1"># App title ----</span> titlePanel<span class="p">(</span><span class="s">"Shiny Text"</span><span class="p">),</span> <span class="c1"># Sidebar layout with a input and output definitions ----</span> sidebarLayout<span class="p">(</span> <span class="c1"># Sidebar panel for inputs ----</span> sidebarPanel<span class="p">(</span> <span class="c1"># Input: Selector for choosing dataset ----</span> selectInput<span class="p">(</span>inputId <span class="o">=</span> <span class="s">"dataset"</span><span class="p">,</span> label <span class="o">=</span> <span class="s">"Choose a dataset:"</span><span class="p">,</span> choices <span class="o">=</span> c<span class="p">(</span><span class="s">"rock"</span><span class="p">,</span> <span class="s">"pressure"</span><span class="p">,</span> <span class="s">"cars"</span><span class="p">)),</span> <span class="c1"># Input: Numeric entry for number of obs to view ----</span> numericInput<span class="p">(</span>inputId <span class="o">=</span> <span class="s">"obs"</span><span class="p">,</span> label <span class="o">=</span> <span class="s">"Number of observations to view:"</span><span class="p">,</span> value <span class="o">=</span> <span class="m">10</span><span class="p">)</span> <span class="p">),</span> <span class="c1"># Main panel for displaying outputs ----</span> mainPanel<span class="p">(</span> <span class="c1"># Output: Verbatim text for data summary ----</span> verbatimTextOutput<span class="p">(</span><span class="s">"summary"</span><span class="p">),</span> <span class="c1"># Output: HTML table with requested number of observations ----</span> tableOutput<span class="p">(</span><span class="s">"view"</span><span class="p">)</span> <span class="p">)</span> <span class="p">)</span> <span class="p">)</span> </code></pre></div> <ul> <li>Run type R shiny paragraph</li> </ul> <div class="highlight"><pre><code class="r language-r" data-lang="r">%r.shiny<span class="p">(</span>type<span class="o">=</span>run<span class="p">)</span> </code></pre></div> <p>After executing the run type R shiny paragraph, the shiny app will be launched and embedded as iframe in paragraph. Take a look at the tutorial note <code>R Tutorial/2. Shiny App</code> for how to develop R shiny app.</p> <p><img class="img-responsive" src="/docs/0.10.1/assets/themes/zeppelin/img/docs-img/r_shiny.png" width="800px"/></p> <h3>Run multiple shiny apps</h3> <p>If you want to run multiple shiny apps, you can specify <code>app</code> in paragraph local property to differentiate different shiny apps.</p> <p>e.g.</p> <div class="highlight"><pre><code class="r language-r" data-lang="r">%r.shiny<span class="p">(</span>type<span class="o">=</span>ui<span class="p">,</span> app<span class="o">=</span>app_1<span class="p">)</span> </code></pre></div><div class="highlight"><pre><code class="r language-r" data-lang="r">%r.shiny<span class="p">(</span>type<span class="o">=</span>server<span class="p">,</span> app<span class="o">=</span>app_1<span class="p">)</span> </code></pre></div><div class="highlight"><pre><code class="r language-r" data-lang="r">%r.shiny<span class="p">(</span>type<span class="o">=</span>run<span class="p">,</span> app<span class="o">=</span>app_1<span class="p">)</span> </code></pre></div> <h2>Run R in yarn cluster</h2> <p>Zeppelin support to <a href="../quickstart/yarn.html">run interpreter in yarn cluster</a>. But there's one critical problem to run R in yarn cluster: how to manage the R environment in yarn container. Because yarn cluster is a distributed cluster which is composed of many nodes, and your R interpreter can start in any node. It is not practical to manage R environment in each node.</p> <p>So in order to run R in yarn cluster, we would suggest you to use conda to manage your R environment, and Zeppelin can ship your R conda environment to yarn container, so that each R interpreter can have its own R environment without affecting each other.</p> <p>To be noticed, you can only run IRKernel interpreter(<code>%r.ir</code>) in yarn cluster. So make sure you include at least the following prerequisites in the below conda env:</p> <ul> <li>python</li> <li>jupyter</li> <li>grpcio</li> <li>protobuf</li> <li>r-base</li> <li>r-essentials</li> <li>r-irkernel</li> </ul> <p><code>python</code>, <code>jupyter</code>, <code>grpcio</code> and <code>protobuf</code> are required for <a href="../interpreter/jupyter.html">jupyter interpreter</a>, because IRKernel interpreter is based on <a href="../interpreter/jupyter.html">jupyter interpreter</a>. Others are for R runtime.</p> <p>Following are instructions of how to run R in yarn cluster. You can find all the code in the tutorial note <code>R Tutorial/3. R Conda Env in Yarn Mode</code>.</p> <h3>Step 1</h3> <p>We would suggest you to use conda pack to create archive of conda environment.</p> <p>Here's one example of yaml file which is used to generate a conda environment with R and some useful R libraries.</p> <ul> <li>Create a yaml file for conda environment, write the following content into file <code>r_env.yml</code></li> </ul> <div class="highlight"><pre><code class="text language-text" data-lang="text">name: r_env channels: - conda-forge - defaults dependencies: - python=3.7 - jupyter - grpcio - protobuf - r-base=3 - r-essentials - r-evaluate - r-base64enc - r-knitr - r-ggplot2 - r-irkernel - r-shiny - r-googlevis </code></pre></div> <ul> <li>Create conda environment via this yaml file using either <code>conda</code> or <code>mamba</code></li> </ul> <div class="highlight"><pre><code class="bash language-bash" data-lang="bash">conda env create -f r_env.yml </code></pre></div><div class="highlight"><pre><code class="bash language-bash" data-lang="bash">mamba env create -f r_env.yml </code></pre></div> <ul> <li>Pack the conda environment using <code>conda</code></li> </ul> <div class="highlight"><pre><code class="bash language-bash" data-lang="bash">conda pack -n r_env </code></pre></div> <h3>Step 2</h3> <p>Specify the following properties to enable yarn mode for R interpreter via <a href="../usage/interpreter/overview.html#inline-generic-configuration">inline configuration</a></p> <div class="highlight"><pre><code class="text language-text" data-lang="text">%r.conf zeppelin.interpreter.launcher yarn zeppelin.yarn.dist.archives hdfs:///tmp/r_env.tar.gz#environment zeppelin.interpreter.conda.env.name environment </code></pre></div> <p><code>zeppelin.yarn.dist.archives</code> is the R conda environment tar file which is created in step 1. This tar will be shipped to yarn container and untar in the working directory of yarn container. <code>hdfs:///tmp/r_env.tar.gz</code> is the R conda archive file you created in step 2. <code>environment</code> in <code>hdfs:///tmp/r_env.tar.gz#environment</code> is the folder name after untar. This folder name should be the same as <code>zeppelin.interpreter.conda.env.name</code>.</p> <h3>Step 3</h3> <p>Now you can use run R interpreter in yarn container and also use any R libraries you specify in step 1.</p> </div> </div> <hr> <footer> <!-- <p>© 2022 The Apache Software Foundation</p>--> </footer> </div> <script type="text/javascript"> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-45176241-5', 'zeppelin.apache.org'); ga('require', 'linkid', 'linkid.js'); ga('send', 'pageview'); </script> </body> </html>