将Scala中的列表转换为Python列表或dataFrame

时间:2016-04-23 00:49:58

标签: python scala apache-spark apache-zeppelin py4j

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

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

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

<class 'py4j.java_gateway.JavaObject'>

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

我正在使用Zeppelin 0.5.5

1 个答案:

答案 0 :(得分: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,然后调用&#34; toPandas()&#34;获得Pandas DataFrame。我不建议这样做,因为你只是将数据并行化,然后再次并行化它(当你调用thePandas()时)。