pyspark.sparkcontext

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!!!']
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,我们需要导入必要的包和模块,并创建SparkContext: ```python from pyspark.conf import SparkConf from pyspark.context import SparkContext from pyspark.sql import SparkSession from pyspark.ml.feature import HashingTF, IDF, Tokenizer from pyspark.ml.classification import LinearSVC from pyspark.ml.evaluation import MulticlassClassificationEvaluator conf = SparkConf().setAppName('SVM for News Classification') sc = SparkContext.getOrCreate(conf=conf) spark = SparkSession(sc) ``` 接下来,我们需要读取数据集。由于数据集是多个按照类别分类的文件夹,我们可以使用textFile()函数递归读取整个目录: ```python data = sc.textFile('/project/art/a.txt', minPartitions=4) ``` 由于数据集是中文文本,我们需要使用Tokenizer对文本进行分词,然后使用HashingTF和IDF对文本进行特征提取和向量化: ```python tokenizer = Tokenizer(inputCol='text', outputCol='words') hashingTF = HashingTF(inputCol=tokenizer.getOutputCol(), outputCol='rawFeatures') idf = IDF(inputCol=hashingTF.getOutputCol(), outputCol='features') words = tokenizer.transform(data) rawFeatures = hashingTF.transform(words) features = idf.fit(rawFeatures).transform(rawFeatures) ``` 接下来,我们需要将数据集划分为训练集和测试集: ```python (trainingData, testData) = features.randomSplit([0.7, 0.3], seed=42) ``` 然后,我们可以使用LinearSVC算法进行训练: ```python svm = LinearSVC(maxIter=10, regParam=0.1) model = svm.fit(trainingData) ``` 最后,我们可以使用MulticlassClassificationEvaluator评估模型的性能: ```python predictions = model.transform(testData) evaluator = MulticlassClassificationEvaluator(predictionCol='prediction', labelCol='label', metricName='accuracy') accuracy = evaluator.evaluate(predictions) print('Test Accuracy = %.2f%%' % (accuracy * 100)) ``` 完整代码如下: ```python from pyspark.conf import SparkConf from pyspark.context import SparkContext from pyspark.sql import SparkSession from pyspark.ml.feature import HashingTF, IDF, Tokenizer from pyspark.ml.classification import LinearSVC from pyspark.ml.evaluation import MulticlassClassificationEvaluator conf = SparkConf().setAppName('SVM for News Classification') sc = SparkContext.getOrCreate(conf=conf) spark = SparkSession(sc) data = sc.textFile('/project/art/a.txt', minPartitions=4) tokenizer = Tokenizer(inputCol='text', outputCol='words') hashingTF = HashingTF(inputCol=tokenizer.getOutputCol(), outputCol='rawFeatures') idf = IDF(inputCol=hashingTF.getOutputCol(), outputCol='features') words = tokenizer.transform(data) rawFeatures = hashingTF.transform(words) features = idf.fit(rawFeatures).transform(rawFeatures) (trainingData, testData) = features.randomSplit([0.7, 0.3], seed=42) svm = LinearSVC(maxIter=10, regParam=0.1) model = svm.fit(trainingData) predictions = model.transform(testData) evaluator = MulticlassClassificationEvaluator(predictionCol='prediction', labelCol='label', metricName='accuracy') accuracy = evaluator.evaluate(predictions) print('Test Accuracy = %.2f%%' % (accuracy * 100)) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值