从Pandas DataFrame创建Spark DataFrame

13

我正在尝试从一个简单的Pandas数据框构建一个Spark数据框。这是我遵循的步骤。

import pandas as pd
pandas_df = pd.DataFrame({"Letters":["X", "Y", "Z"]})
spark_df = sqlContext.createDataFrame(pandas_df)
spark_df.printSchema()

到这里一切都正常。输出结果为:

root
|-- Letters: string (nullable = true)

问题出现在我尝试打印DataFrame时:

spark_df.show()

这是结果:

在调用 o158.collectToPython 时发生错误。: org.apache.spark.SparkException:由于阶段失败而中止作业:第5.0阶段中的任务0失败了1次,最近一次失败:在第5.0阶段中(TID 5,localhost,执行程序驱动程序)失去了任务0.0: org.apache.spark.SparkException:
来自python工作进程的错误:
执行Jupyter命令“pyspark.daemon”时出错:[Errno 2]没有此类文件或目录PYTHONPATH为:
/home/roldanx/soft/spark-2.4.0-bin-hadoop2.7/python/lib/pyspark.zip:/home/roldanx/soft/spark-2.4.0-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip:/home/roldanx/soft/spark-2.4.0-bin-hadoop2.7/jars/spark-core_2.11-2.4.0.jar:/home/roldanx/soft/spark-2.4.0-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip:/home/roldanx/soft/spark-2.4.0-bin-hadoop2.7/python/: org.apache.spark.SparkException: p y s p a r k . 恶魔的 stdout 中没有端口号

这是我的 Spark 规格:

SparkSession - hive

SparkContext

Spark UI

版本: v2.4.0

主节点: local[*]

应用名称: PySparkShell

这是我的虚拟环境:

export PYSPARK_PYTHON=jupyter

export PYSPARK_DRIVER_PYTHON_OPTS='lab'

事实:

如错误所述,它与从 Jupyter 运行 pyspark 有关。使用 'PYSPARK_PYTHON=python2.7' 和 'PYSPARK_PYTHON=python3.6' 运行正常。

1个回答

16

导入并初始化findspark,创建一个spark会话,然后使用该对象将pandas数据帧转换为spark数据帧。然后将新的spark数据帧添加到目录中。在Jupiter 5.7.2和Spyder 3.3.2以及Python 3.6.6中经过测试并可运行。

import findspark
findspark.init()

import pyspark
from pyspark.sql import SparkSession
import pandas as pd

# Create a spark session
spark = SparkSession.builder.getOrCreate()

# Create pandas data frame and convert it to a spark data frame 
pandas_df = pd.DataFrame({"Letters":["X", "Y", "Z"]})
spark_df = spark.createDataFrame(pandas_df)

# Add the spark data frame to the catalog
spark_df.createOrReplaceTempView('spark_df')

spark_df.show()
+-------+
|Letters|
+-------+
|      X|
|      Y|
|      Z|
+-------+

spark.catalog.listTables()
Out[18]: [Table(name='spark_df', database=None, description=None, tableType='TEMPORARY', isTemporary=True)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接