在 zeppelin 中将 pandas 数据帧转换为 spark 数据帧

Posted

技术标签:

【中文标题】在 zeppelin 中将 pandas 数据帧转换为 spark 数据帧【英文标题】:converting pandas dataframes to spark dataframe in zeppelin 【发布时间】:2016-01-03 03:46:02 【问题描述】:

我是 zeppelin 的新手。我有一个用例,其中我有一个 pandas 数据框。我需要使用 zeppelin 的内置图表来可视化集合我这里没有明确的方法。我的理解是使用 zeppelin,如果它是 RDD 格式,我们可以将数据可视化。所以,我想将 pandas 数据帧转换为 spark 数据帧,然后进行一些查询(使用 sql),我将可视化。 首先,我尝试将 pandas 数据帧转换为 spark's 但我失败了

%pyspark
import pandas as pd
from pyspark.sql import SQLContext
print sc
df = pd.DataFrame([("foo", 1), ("bar", 2)], columns=("k", "v"))
print type(df)
print df
sqlCtx = SQLContext(sc)
sqlCtx.createDataFrame(df).show()

我得到了以下错误

Traceback (most recent call last): File "/tmp/zeppelin_pyspark.py", 
line 162, in <module> eval(compiledCode) File "<string>", 
line 8, in <module> File "/home/bala/Software/spark-1.5.0-bin-hadoop2.6/python/pyspark/sql/context.py", 
line 406, in createDataFrame rdd, schema = self._createFromLocal(data, schema) File "/home/bala/Software/spark-1.5.0-bin-hadoop2.6/python/pyspark/sql/context.py", 
line 322, in _createFromLocal struct = self._inferSchemaFromList(data) File "/home/bala/Software/spark-1.5.0-bin-hadoop2.6/python/pyspark/sql/context.py", 
line 211, in _inferSchemaFromList schema = _infer_schema(first) File "/home/bala/Software/spark-1.5.0-bin-hadoop2.6/python/pyspark/sql/types.py", 
line 829, in _infer_schema raise TypeError("Can not infer schema for type: %s" % type(row)) 
TypeError: Can not infer schema for type: <type 'str'> 

有人可以帮我吗?另外,如果我在任何地方错了,请纠正我。

【问题讨论】:

【参考方案1】:

以下适用于 Zeppelin 0.6.0、Spark 1.6.2 和 Python 3.5.2:

%pyspark
import pandas as pd
df = pd.DataFrame([("foo", 1), ("bar", 2)], columns=("k", "v"))
z.show(sqlContext.createDataFrame(df))

呈现为:

【讨论】:

【参考方案2】:

我刚刚将您的代码复制并粘贴到笔记本中,它可以工作。

%pyspark
import pandas as pd
from pyspark.sql import SQLContext
print sc
df = pd.DataFrame([("foo", 1), ("bar", 2)], columns=("k", "v"))
print type(df)
print df
sqlCtx = SQLContext(sc)
sqlCtx.createDataFrame(df).show()

<pyspark.context.SparkContext object at 0x10b0a2b10>
<class 'pandas.core.frame.DataFrame'>
     k  v
0  foo  1
1  bar  2
+---+-+
|  k|v|
+---+-+
|foo|1|
|bar|2|
+---+-+

我正在使用这个版本: zeppelin-0.5.0-incubating-bin-spark-1.4.0_hadoop-2.3.tgz

【讨论】:

【参考方案3】:

尝试在 bash 中设置 SPARK_HOME 和 PYTHONPATH 变量,然后重新运行它

    export SPARK_HOME=path to spark
    export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/build:$PYTHONPATH
    export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.8.2.1-src.zip:$PYTHONPATH

【讨论】:

以上是关于在 zeppelin 中将 pandas 数据帧转换为 spark 数据帧的主要内容,如果未能解决你的问题,请参考以下文章

Angular - 在 Zeppelin 中将动态表单内容插入数据库

Zeppelin Apache - 使用 Angular 添加下载按钮,以便下载 Pandas 或 PySpark Dataframe

如何在 zeppelin 中将数组从 spark 绑定到 javascript?

如何在 Zeppelin 的 javascript 中将变量放入 z ZeppelinContext?

导入 Pandas 时出现 Apache Zeppelin 错误

无法在 Spark 中将文件写入 Zeppelin 上的远程 hdfs