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

Tho*_*eph 5 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)
Run Code Online (Sandbox Code Playgroud)

只是为了澄清,basedir('data')是csv文件所在的文件夹.请帮忙

Pie*_*ier 10

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

您可以查看笔记本后面的命令shell中发生的事情以获得解释.

当你第一次打电话时:

sc=SparkContext() 
Run Code Online (Sandbox Code Playgroud)

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

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

删除SparkContext定义时它的工作原因是因为sc已定义,但下次启动IPython笔记本时,我认为你必须运行sc = SparkContext()一次.

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

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

import os.path
import csv
from pyspark import SparkContext
sc = SparkContext()
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

但是如果你想要一个单元格,你也可以在代码末尾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()
Run Code Online (Sandbox Code Playgroud)

我真的建议O'Reilly的书" 学习Spark Lightning" - Holden Karau,Andy Konwinski,Patrick Wendell和Matei Zaharia 的快速数据分析.特别是关于理解核心Spark概念的这类问题的第2章.

也许你现在知道这一点,如果它是道歉,但它可能会帮助别人!