2016-04-23 3 views
1

У меня есть список 2d в Scala под названием dataList, и я хочу преобразовать его в Pandas DataFrame.Преобразование списка в Scala в список Python или dataFrame

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

Если я хочу напечатать dataList, все работает отлично и тип объекта в Python является

<class 'py4j.java_gateway.JavaObject'> 

Насколько я знаю, я должен использовать py4j, чтобы иметь доступ к коллекциям в Python , Тем не менее, я думаю, что я должен использовать вложенный цикл для доступа к каждому элементу dataList, а затем положить в DataFrame. Есть ли более умный способ напрямую преобразовать его в DataFrame или в список python, а затем DataFrame?

Я использую Цеппелин 0.5.5

+0

Поскольку я использую Zeppelin, да! – MTT

+0

Затем добавьте 'Apache-Spark' в теги вопроса, этот вопрос может быть полезен для кого-то еще в будущем, или, возможно, у кого-то раньше было это беспокойство. –

+0

Вы правы! Готово. – MTT

ответ

2

Если преобразовать список 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 в (Спарк) DataFrame во-первых, рука, к Python, а затем вызовите «toPandas()», чтобы получить Pandas DataFrame. Я бы не рекомендовал его, так как вы просто распараллеливали данные, а затем снова непараллелизировали его (когда вы вызываете toPandas()).