python - "unbound method textFile() must be called with SparkContext instance as first argument (got str instance instead)"

标签 python apache-spark pyspark

我正在尝试使用 sc.textFile() 函数读取 csv 文件。但是我收到“必须使用 SparkContext 实例作为第一个参数调用未绑定(bind)方法 textFile()(取而代之的是 str 实例)”错误。我在 stackoverflow 中检查了可能的答案,但找不到任何答案。请帮忙

我在 iPython Notebook 中使用以下脚本

import os.path

from pyspark import SparkContext


import csv


basedir = os.path.join('data') 

inputpath = os.path.join('train_set.csv') 

filename = os.path.join(basedir,inputpath)

numpart = 2

sc = SparkContext

train_data = sc.textFile(filename,numpart)

澄清一下,basedir ('data') 是 csv 文件所在的文件夹。请帮忙

最佳答案

首先,感谢您的提问,我用这个答案找到了同类问题的解决方案。我想回答您在 2015 年 8 月 11 日发表的评论。

您可能会查看笔记本后面的命令 shell 中发生的情况以获得解释。

当你第一次打电话时:

sc=SparkContext() 

您将看到 Spark 正在初始化,就像您刚刚从命令 shell 启动 Spark 一样。 所以你初始化sc(默认情况下在启动Spark时)

如果您第二次调用它,就会出现您在评论中提到的错误。所以我会说你已经有一个 Spark 上下文 sc 在你第一次尝试建议时初始化(或者你可能运行了两次建议)。

当您删除 SparkContext 定义时它起作用的原因是因为 sc 已定义,但下次您启动 IPython notebook,我想你将不得不运行 sc = SparkContext() 一次。

为了更清楚,我想说的是,从 IPython Notebook 的角度来看,代码将组织如下:

每次重新启动内核时运行一次的一个单元格,以自定义您的 Python 环境并初始化您的 Spark 环境:

import os.path
import csv
from pyspark import SparkContext
sc = SparkContext()

您为测试目的多次运行的第二个单元格:

basedir = os.path.join('data') 
inputpath = os.path.join('train_set.csv') 
filename = os.path.join(basedir,inputpath)
numpart = 2
train_data = sc.textFile(filename,numpart)

但如果您想要一个单元格,您还可以在代码末尾调用 SparkContext 对象的 stop() 方法:

#your initialization
import os.path
import csv
from pyspark import SparkContext
sc = SparkContext()
#your job
basedir = os.path.join('data') 
inputpath = os.path.join('train_set.csv') 
filename = os.path.join(basedir,inputpath)
numpart = 2
train_data = sc.textFile(filename,numpart)
#closing the SparkContext
sc.stop()

我真的推荐 O'Reilly 的书 Learning Spark Lightning-fast data analysis由 Holden Karau、Andy Konwinski、Patrick Wendell 和 Matei Zaharia 撰写。特别是第 2 章,针对此类有关理解核心 Spark 概念 的问题。

也许你现在知道了,如果知道的话请道歉,但它可能对其他人有帮助!

关于python - "unbound method textFile() must be called with SparkContext instance as first argument (got str instance instead)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31921003/

相关文章:

apache-spark - 基于Spark中的函数加入两个没有公共(public) key 的RDD

python - 在 Jupyter 笔记本中使用 PySpark 时如何包含外部 Spark 库

amazon-web-services - 运行 zepplin 连接 aws 胶时出错

python - 检查 Unity 元目录中是否存在表

python - 不了解字符串算法到单词列表功能

java - spark如何向集群发送作业?

python - 寻找一个 Python 库来模拟数据库

apache-spark - mapPartitions 返回空数组

python - 当我尝试对角化对称矩阵时,为什么 `np.linalg.eig` 不返回酉矩阵?

python看门狗运行不止一次