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)
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章.
也许你现在知道这一点,如果它是道歉,但它可能会帮助别人!
| 归档时间: |
|
| 查看次数: |
6831 次 |
| 最近记录: |