sparkcontext是Spark功能的主要入口点。它表示与Spark群集的连接,可用于在该群集上创建RDD和广播变量。
文章目录
sparkcontext.addFile()
- addFile()可以在每个节点上添加文件。 传递的路径可以是本地文件,HDFS(或其他Hadoop支持的文件系统)中的文件,也可以是HTTP,HTTPS或FTP URI。
首先启动spark,并创建sparkcontext实例。
from pyspark.sql import SparkSession
spark=SparkSession.builder.appName("local").enableHiveSupport()\
.getOrCreate()
sc=spark.sparkContext
添加文件
from pyspark import SparkFiles
tmpdir="./data"
path=os.path.join(tmpdir,"test.txt")
with open(path,mode="w") as files:
files.write("100")
sc.addFile(path)
print(SparkFiles.get("text.txt"))
'C:\\Users\\Administrator\\AppData\\Local\\Temp\\spark-282ed4c3-d244-40f5-bde0-bb616aebb68a\\userFiles-59aff513-c577-49cc-adc4-0258d7623cae\\text.txt'
sparkcontext.parallelize(c, numSlices=None)
- 创建RDD(弹性分布式数据集),其中c可以是列表,numSlices表示分区数.
sc.parallelize([0, 2, 3, 4, 6], 3).glom().collect()
#[[0], [2, 3], [4, 6]]
sc.parallelize([0, 2, 3, 4, 6], 5).collect()
#[0, 2, 3, 4, 6]
glom函数后面会讲到
sparkcontext.runJob(rdd, partitionFunc, partitions=None, allowLocal=False)
- 在指定的分区集上执行给定的partitionFunc,将结果作为元素数组返回,如果未指定“partitions”,则将在所有分区上运行。
myRDD = sc.parallelize(range(6), 3)
sc.runJob(myRDD, lambda part: [x * x for x in part])
#[0, 1, 4, 9, 16, 25]
myRDD = sc.parallelize(range(6), 3)
sc.runJob(myRDD, lambda part: [x * x for x in part], [0, 2], True)
#[0, 1, 16, 25]
sparkcontext.textFile(name, minPartitions=None, use_unicode=True)
- 从HDFS读取文本文件,或者本地文件系统(在所有节点上都可用)或任何支持Hadoop的文件系统URI,并将其作为字符串的RDD返回。
path = os.path.join(tempdir, "sample-text.txt")
textFile = sc.textFile(path)
textFile.collect()
#['Hello world!']
sparkcontext.union(rdds)
- RDD求并集
rdd1=sc.parallelize(["hello"])
rdd2=sc.parallelize(["baby!!!"])
sc.union([rdd1,rdd2]).collect()
#['hello', 'baby!!!']