2016-04-23 7 views
1

Ich habe eine 2d-Liste in Scala namens dataList und ich möchte es in ein Pandas DataFrame konvertieren.Konvertieren Sie eine Liste in Scala zu Python-Liste oder dataFrame

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

Wenn ich dataList ausdrucken mag, funktioniert alles einwandfrei und die Art des Objekts in Python ist

<class 'py4j.java_gateway.JavaObject'> 

Soweit ich weiß, ich habe py4j zu verwenden, um Zugang zu den Sammlungen in Python haben . Ich denke jedoch, dass ich eine verschachtelte Schleife verwenden muss, um auf jedes Element von dataList zuzugreifen und dann in eine DataFrame einzutragen. Gibt es eine klügere Möglichkeit, es direkt in DataFrame oder eine Python-Liste und dann DataFrame zu konvertieren?

Ich bin mit Zeppelin 0.5.5

+0

Seit ich Zeppelin benutze, ja! – MTT

+0

Dann fügen Sie '' Apache-Spark'' zu den Tags der Frage hinzu, diese Frage könnte für jemand anderen in der Zukunft nützlich sein oder vielleicht hatte jemand diese Unruhe zuvor. –

+0

Sie haben Recht! Erledigt. – MTT

Antwort

2

Wenn Sie Ihre Scala Liste in Java Liste zuerst konvertieren (mit Konverter), PySpark sollte auf eine Python-Liste automatisch konvertiert es in der Lage sein.

In einer Scala Zelle:

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) 

In einer separaten Zelle für Python:

%pyspark 
# Read from Zeppelin context 
dataList = z.get("dataList") 
print dataList 

Sie können auch Ihre Scala Liste in einen (Funken) Datenrahmen zunächst denkbar konvertieren, Hand, die über Python und dann "toPandas()" aufrufen, um einen Pandas DataFrame zu erhalten. Ich würde es jedoch nicht empfehlen, da Sie nur die Daten parallelisieren und dann erneut parallelisieren (wenn Sie toPandas() aufrufen).