将 Scala 中的列表转换为 Python 列表或数据帧
Convert a list in Scala to Python list or dataFrame
我在 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
如果您先将 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。不过我不推荐这样做,因为您只是将数据并行化,然后再次对其进行非并行化(当您调用 Pandas() 时)。
我在 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
如果您先将 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。不过我不推荐这样做,因为您只是将数据并行化,然后再次对其进行非并行化(当您调用 Pandas() 时)。