项目中需要实现一个简单的聚类,初步衡量了下样本数量在2000W左右,第一次写spark还是14年的时候,而且都是基于java实现的模型算法,这次就简单用pyspark实现了特征的Id化, 即将字符串类型的特征转为数字表示的Id。这个在模型中相对比较常见, 比较主要的点应该是使用broadcast广播了特征和id的映射关系。 #!/usr/bin/env python #-*-coding:utf-8-*- from pyspark.conf import SparkConf from pyspark.context import SparkContext from pyspark.rdd import RDD from pyspark.files import SparkFiles from StringIO import StringIO import collections def parse(text): elems = text[1].split() if len(elems) != 2:return [] return elems[1].split(',') def feat_to_id(text, feats_id_map): elems = text[1].split() first = elems[0] feats = elems[1].split(',') feat_ids = [str(feats_id_map.value[feat]) for feat in feats] return first, ",".join(feat_ids) def feat_id_to_line(x, y): return x + "\t" + str(y) """ 样本特征的ID化,即将样本的字符串转为数字 @