| |
| <!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="/docs/0.10.1/assets/themes/zeppelin/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="/docs/0.10.1/assets/themes/zeppelin/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"> |
| |
| <!-- Matomo --> |
| <script> |
| var _paq = window._paq = window._paq || []; |
| /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ |
| _paq.push(["setDoNotTrack", true]); |
| _paq.push(["disableCookies"]); |
| _paq.push(['trackPageView']); |
| _paq.push(['enableLinkTracking']); |
| (function() { |
| var u="https://analytics.apache.org/"; |
| _paq.push(['setTrackerUrl', u+'matomo.php']); |
| _paq.push(['setSiteId', '69']); |
| var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; |
| g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); |
| })(); |
| </script> |
| <!-- End Matomo Code --> |
| </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> |
| |
| |
| |
| |
| |
| |
| |
| </body> |
| </html> |
| |