

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将多语言 Notebooks 与 Spark 内核配合使用
<a name="emr-multi-language-kernels"></a>

每个 Jupyter Notebook 内核都有默认语言。例如，Spark 内核的默认语言是 Scala，而内 PySpark 核的默认语言是 Python。借助 Amazon EMR 6.4.0 及更高版本，EMR Studio 支持多语言 Notebooks。这意味着除了默认语言 Python、Spark、R 和 Spark SQL 之外，EMR Studio 中的每个内核都可以支持以下语言。

要激活此功能，请在任何单元格的开头指定以下一种 magic 命令。


****  

| 语言 | 命令 | 
| --- | --- | 
| Python | `%%pyspark` | 
| Scala | `%%scalaspark` | 
| R | `%%rspark`<br />不支持将交互式工作负载与 EMR Serverless 结合使用。 | 
| Spark SQL | `%%sql` | 

调用后，这些命令会使用相应语言的解释器在同一 Spark 会话中执行整个单元格。

该`%%pyspark`单元magic允许用户在所有 Spark 内核中编写 PySpark 代码。

```
%%pyspark
a = 1
```

用户可以使用 `%%sql` 单元格 magic 在所有 Spark 内核中执行 Spark-SQL 代码。

```
%%sql
SHOW TABLES
```

用户可以使用 `%%rspark` 单元格 magic 在所有 Spark 内核中执行 SparkR 代码。

```
%%rspark
a <- 1
```

用户可以使用 `%%scalaspark` 单元格 magic 在所有 Spark 内核中执行 Spark Scala 代码。

```
%%scalaspark
val a = 1
```

## 使用临时表格在多个语言解释器之间共享数据
<a name="emr-temp-tables"></a>

您还可以使用临时表格在语言解释器之间共享数据。以下示例通过单元格的 `%%pyspark` 用 Python 创建临时表格，并通过下列单元格的 `%%scalaspark` 从 Scala 该表中读取数据。

```
%%pyspark
df=spark.sql("SELECT * from nyc_top_trips_report LIMIT 20")
# create a temporary table called nyc_top_trips_report_view in python
df.createOrReplaceTempView("nyc_top_trips_report_view")
```

```
%%scalaspark
// read the temp table in scala
val df=spark.sql("SELECT * from nyc_top_trips_report_view")
df.show(5)
```