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

4

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

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

如果我想打印dataList,一切都正常工作,在Python中对象的类型是
<class 'py4j.java_gateway.JavaObject'>

据我所知,要访问Python中的集合,必须使用py4j。然而,我认为我需要使用嵌套循环来访问dataList中的每个元素,然后将其放入DataFrame。是否有更聪明的方法可以直接将其转换为DataFrame或Python列表,然后再转换为DataFrame
我正在使用Zeppelin 0.5.5。

由于我正在使用Zeppelin,是的! - MTT
然后将Apache-Spark添加到问题的标签中,这个问题可能对未来的某个人有用,或者之前有人曾经有过这样的疑问。 - Alberto Bonsanto
1个回答

3
如果您先将Scala List转换为Java List(使用转换器),PySpark应该能够自动将其转换为Python list。
在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()时)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接