“必须以SparkContext实例作为第一个参数调用未绑定方法textFile()(改为get str instance)”

2024-05-16 03:10:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用sc.textFile()函数读取csv文件。但是,我得到了“unbound method textFile()必须用SparkContext实例作为第一个参数调用(改为get str instance)”错误。我在stackoverflow中查找了可能的答案,但找不到任何答案。请帮忙

我正在使用iPython笔记本中的以下脚本

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文件所在的文件夹。请帮助


Tags: 文件csvpath答案importdataostrain
1条回答
网友
1楼 · 发布于 2024-05-16 03:10:53

首先,谢谢你的问题,我用答案找到了解决同类问题的方法。我想回答你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)

但是如果需要一个单元格,也可以在代码末尾调用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由霍尔顿卡拉乌,安迪康文斯基,帕特里克温德尔和马特扎哈里。特别是关于理解核心概念的第二章。

也许你现在知道了,如果是的话道歉,但这可能会帮助别人!

相关问题 更多 >