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

Posted

技术标签:

【中文标题】将 Scala 中的列表转换为 Python 列表或数据帧【英文标题】:Convert a list in Scala to Python list or dataFrame 【发布时间】:2016-08-16 18:21:02 【问题描述】:

我在 Scala 中有一个名为 dataList 的二维列表,我想将其转换为 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

【问题讨论】:

因为我用的是 Zeppelin,是的! 然后将Apache-Spark添加到问题的标签中,这个问题将来可能对其他人有用,或者可能有人以前有过这种疑问。 【参考方案1】:

如果您首先将 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() 时)。

【讨论】:

以上是关于将 Scala 中的列表转换为 Python 列表或数据帧的主要内容,如果未能解决你的问题,请参考以下文章

将 CSV 数据转换为 scala 中的地图列表

Scala - 将列表转换为单个列表:List[List[A]] 到 List[A]

将 Scala 列表转换为元组?

Scala - 将地图列表转换为地图

将 Scala 数组转换为唯一排序列表的有效方法

将列表列表转换为Python中的字典字典