将Scala中的列表转换为Python列表或数据帧

将Scala中的列表转换为Python列表或数据帧,python,scala,apache-spark,apache-zeppelin,py4j,Python,Scala,Apache Spark,Apache Zeppelin,Py4j,我在Scala中有一个名为dataList的2d列表,我想将其转换为一个DataFrame val dataList: List[List[Int]] = tempData.toList 如果我想打印数据列表,一切正常,Python中的对象类型是 <class 'py4j.java_gateway.JavaObject'> 据我所知,我必须使用py4j才能访问Python中的集合。但是,我认为我必须使用嵌套循环来访问dataList的每个元素,然后放入DataFrame。有没

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

val dataList: List[List[Int]] = tempData.toList
如果我想打印
数据列表
,一切正常,Python中的对象类型是

<class 'py4j.java_gateway.JavaObject'>

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


我使用的是齐柏林飞艇0.5.5,如果您先将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)数据帧,将其交给Python,然后调用“toPandas()”以获得数据帧。不过,我不推荐这样做,因为您只需将数据并行化,然后再将其取消并行化(当您调用toPandas()时)。

因为我使用的是齐柏林飞艇,是的!然后将
apachespark
添加到question的标记中,这个问题可能对将来的其他人有用,或者可能有人以前有过这样的疑问。