我正在尝试使用 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/