我正在尝试使用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)
答案 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章。
也许你现在知道这一点,如果是这样道歉,但它可能对其他人有帮助!