2017-12-27 40 views
-1

Seaborn을 사용하여 데이터를 시각화하려고합니다. pyspark에서 SQLContext를 사용하여 데이터 프레임을 만들었습니다. 그러나 lmplot을 호출하면 오류가 발생합니다. 나는 내가 무엇을 놓치고 있는지 확신하지 못한다. 내 코드는 다음과 같습니다. (주피터 노트를 사용하고 있습니다)jupyter 노트북 (pyspark)에서 Seaborn을 사용할 때의 오류

import pandas as pd 

from matplotlib import pyplot as plt 

import seaborn as sns 

from pyspark.sql import SQLContext 

sqlContext = SQLContext(sc) 

df = sqlContext.read.load('file:///home/cloudera/Downloads/WA_Sales_Products_2012-14.csv', 
         format='com.databricks.spark.csv', 
         header='true',inferSchema='true') 

sns.lmplot(x='Quantity', y='Year', data=df) 

Error trace: 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-86-2a2b43993475> in <module>() 
----> 2 sns.lmplot(x='Quantity', y='Year', data=df) 

/home/cloudera/anaconda3/lib/python3.5/site-packages/seaborn/regression.py in lmplot(x, y, data, hue, col, row, palette, col_wrap, size, aspect, markers, sharex, sharey, hue_order, col_order, row_order, legend, legend_out, x_estimator, x_bins, x_ci, scatter, fit_reg, ci, n_boot, units, order, logistic, lowess, robust, logx, x_partial, y_partial, truncate, x_jitter, y_jitter, scatter_kws, line_kws) 
    557      hue_order=hue_order, size=size, aspect=aspect, 
    558      col_wrap=col_wrap, sharex=sharex, sharey=sharey, 
--> 559      legend_out=legend_out) 
    560 
    561  # Add the markers here as FacetGrid has figured out how many levels of the 

/home/cloudera/anaconda3/lib/python3.5/site-packages/seaborn/axisgrid.py in __init__(self, data, row, col, hue, col_wrap, sharex, sharey, size, aspect, palette, row_order, col_order, hue_order, hue_kws, dropna, legend_out, despine, margin_titles, xlim, ylim, subplot_kws, gridspec_kws) 
    255   # Make a boolean mask that is True anywhere there is an NA 
    256   # value in one of the faceting variables, but only if dropna is True 
--> 257   none_na = np.zeros(len(data), np.bool) 
    258   if dropna: 
    259    row_na = none_na if row is None else data[row].isnull() 

TypeError: object of type 'DataFrame' has no len() 

도움이나 의견을 보내 주시면 감사하겠습니다. 사전에 감사드립니다 :-)

답변

0

sqlContext.read.load(...)은 Spark-DataFrame을 반환합니다. seaborn이 Spark-DataFrame을 Pandas-Dataframe으로 자동 캐스팅 할 수 있는지 여부는 확실하지 않습니다.

시도 :

sns.lmplot(x='Quantity', y='Year', data=df.toPandas()) 

df.toPandas()는 불꽃-DF에서 팬더-DF를 반환합니다.