2016-03-01 23 views
6

DataFrame'e sahip bir Scala paragrafım varsa, bunu python ile paylaşabilir ve kullanabilir miyim?Zeppelin: Python'a Scala Dataframe

Scala paragraf:

x.printSchema 
z.put("xtable", x) 

Python paragraf:

%pyspark 

import numpy as np 
import pandas as pd 

import matplotlib.pyplot as plt 
import seaborn as sns 

the_data = z.get("xtable") 

print the_data 

sns.set() 
g = sns.PairGrid(data=the_data, 
       x_vars=dependent_var, 
       y_vars=sensor_measure_columns_names + operational_settings_columns_names, 
       hue="UnitNumber", size=3, aspect=2.5) 
g = g.map(plt.plot, alpha=0.5) 
g = g.set(xlim=(300,0)) 
g = g.add_legend() 

Hata:

Traceback (most recent call last): 
    File "/tmp/zeppelin_pyspark.py", line 222, in <module> 
    eval(compiledCode) 
    File "<string>", line 15, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/seaborn/axisgrid.py", line 1223, in __init__ 
    hue_names = utils.categorical_order(data[hue], hue_order) 
TypeError: 'JavaObject' object has no attribute '__getitem__' 

Bu çalıştı (Anladığım kadarıyla pyspark py4j kullanır)Çözüm: SQLContext.table ile Python

// registerTempTable in Spark 1.x 
df.createTempView("df") 

ve okumak: Sen Scala geçici tablo olarak DataFrame kayıt olabilirsiniz

%pyspark 

import numpy as np 
import pandas as pd 

import matplotlib.pyplot as plt 
import seaborn as sns 

import StringIO 
def show(p): 
    img = StringIO.StringIO() 
    p.savefig(img, format='svg') 
    img.seek(0) 
    print "%html <div style='width:600px'>" + img.buf + "</div>" 

df = sqlContext.table("fd").select() 
df.printSchema 
pdf = df.toPandas() 

g = sns.pairplot(data=pdf, 
       x_vars=["setting1","setting2"], 
       y_vars=["s4", "s3", 
         "s9", "s8", 
         "s13", "s6"], 
       hue="id", aspect=2) 
show(g) 

cluster visualisation

cevap

18

df = sqlContext.table("df") 

Eğer gerçektenkullanmak istiyorum/get sıfırdan inşa Python DataFrame gerekecek:

pdf = df.toPandas() 
:

z.put("df", df: org.apache.spark.sql.DataFrame) 
from pyspark.sql import DataFrame 

df = DataFrame(z.get("df"), sqlContext) 

Eğer collect veya toPandas biriyle yerel bir Python nesnesine DataFrame dönüştürmek gelmiş olacak matplotlib ile çizdirmek için

Lütfen sürücüye veri alacağını unutmayın.

da moving Spark DataFrame from Python to Scala whithn Zeppelin

+0

Spark 1.6.0 veya önceki kullanarak, açıkça kullandığınız her bir dil için yeni SqlContext ilan etmek gerek bakın. Infact, [SPARK-13180] (https://issues.apache.org/jira/browse/SPARK-13180) hatası nedeniyle, başlangıçta Zeppelin tarafından oluşturulan HiveContext çalışmıyor. Bu durumda DataFrame'i Python ve Scala'da paylaşmanın tek yolu, Dataframe referansını Scala'dan Zeppelin bağlamına koymak ve Python'dan 'DataFrame (z.get (" df "), sqlContext)' ile kurtarmaktır. –

+0

herhangi bir geçici oluşturarak '% sql'de erişebilirsiniz – Junaid