4

Scala に 2 次元のリストがあり、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 を使用しています

4

1 に答える 1

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 に渡してから、「toPandas()」を呼び出して Pandas DataFrame を取得することもできます。ただし、データを並列化してから再度非並列化するだけなので (toPandas() を呼び出すとき)、お勧めしません。

于 2016-04-23T01:40:32.677 に答える