4

我在 Scala 中有一个 2d 列表,dataList我想将其转换为 Pandas DataFrame

val dataList: List[List[Int]] = tempData.toList

如果我想打印dataList,一切正常,Python 中的对象类型是

<class 'py4j.java_gateway.JavaObject'>

据我所知,我必须使用py4j才能访问 Python 中的集合。但是,我认为我必须使用嵌套循环来访问每个元素,dataList然后放入DataFrame. 有没有更聪明的方法可以直接将其转换为DataFramepython 列表,然后DataFrame

我正在使用 Zeppelin 0.5.5

4

1 回答 1

3

如果您首先将 Scala 列表转换为 Java 列表(使用转换器),PySpark 应该能够将其自动转换为 Python 列表。

在 Scala 单元格中:

import scala.collection.JavaConverters._

// Sample of what I assume your "dataList" looks like
val dataList: List[List[Int]] = List(List(1,2,3),List(4,5,6))
// Convert to java.util.List
val javaDataList: java.util.List[java.util.List[Int]] =
  dataList.map(_.asJava).asJava
// Place in Zeppelin context for %pyspark cell access
z.put("dataList", javaDataList)

在 Python 的单独单元格中:

%pyspark
# Read from Zeppelin context
dataList = z.get("dataList")
print dataList

您还可以想象先将您的 Scala 列表转换为 (Spark) DataFrame,将其交给 Python,然后调用“toPandas()”来获取 Pandas DataFrame。不过我不推荐它,因为您只是将数据并行化,然后再次对其进行非并行化(当您调用 toPandas() 时)。

于 2016-04-23T01:40:32.677 回答