"非绑定方法textFile()必须使用SparkContext实例作为第一个参数调用(改为使用str实例)"

时间:2015-08-10 13:35:01

标签: python apache-spark pyspark

我正在尝试使用sc.textFile()函数来读取csv文件。但是我得到"未绑定方法textFile()必须使用SparkContext实例作为第一个参数调用(改为使用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文件所在的文件夹。请帮忙

1 个答案:

答案 0 :(得分:10)

首先,谢谢你的问题,我用答案找到解决同类问题的方法。我想回答您2015年8月11日的评论。

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

第一次打电话时:

sc=SparkContext() 

您将看到Spark被初始化,就像您从命令shell启动Spark时一样。 因此,您初始化sc(默认情况下,在Spark启动时)

如果您再次拨打电话,则表示您在评论中发现错误。所以我会说你第一次尝试建议时已经初始化了Spark上下文sc(或者你可能已经两次运行了建议)。

删除SparkContext定义时它的工作原因是因为sc已定义,但下次启动IPython笔记本时,我认为您必须运行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)

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

#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()

我真的建议Holden Karau,Andy Konwinski,Patrick Wendell&的O' Reilly书Learning Spark Lightning-fast data analysis。 Matei Zaharia。特别是关于理解核心Spark概念的这类问题的第2章。

也许你现在知道这一点,如果是这样道歉,但它可能对其他人有帮助!