背景说明
实习期间需要使用Spark处理一些集群上的数据,其实Spark是基于Scala语言的(和Java比较接近),但我是Python用的多,况且Spark2.0之后对Python的支持友好了许多,于是我就使用PySpark来学习了。
因为是直接使用现有的集群,这里不会涉及配置spark环境的问题,我使用的版本是:PySpark 2.1.0
最好的参考资料当然是官方文档,
一个官方的QuickStart 也是可以看看的。
但我在看文档,自己测试的时候却遇到一些问题,这和实际的配置情况有关。
Quick Start
官方的quick start是让我们在spark-shell开始的,这确实是个好主意。
但是当我进入spark目录,照着教程敲出 ./bin/pyspark
想启动spark-shell的时候,立马给我报个错:
java.sql.SQLException: A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection.
小白的我问了一下同事,原来启动这个spark-shell还要在本地创建一个文件型的database的,在spark文件夹下(在root下)我是只有读的权限,没有写的权限的,于是我回到我的用户文件夹(我有完全的权限),键入 类似/usr/local/spark/bin/pyspark
这样的命令,就启动了spark-shell了。
quit()
可以退出,不要 ctrl+C这么暴力了。
进入命令行后,照着教程敲呗, >>> textFile = spark.read.text("README.md")
生活总是充满惊喜,这是报了另一个错: pyspark.sql.utils.AnalysisException: u'Path does not exist: hdfs:****/README.md
这个错不难猜到,官方教程的意思是spark文件夹下有Readme.md这个文件,想把它作为一个例子,我也确实把这个文件copy到我的目录下了,但是这台机器的spark应该被配置过,它读文件默认是从HDFS上读的,好嘛,我就从HDFS上找一些文件来练练手。
权限管理是比较严格的,HDFS上我的读权限也只局限在我的用户路径,也是默认路径。
之后spark-shell上的初体验可以顺着官方文档,就不细讲了。