python - PySpark 中的聚合

标签 python apache-spark normalize

我的数据格式是

UserId\tItemId:Score,ItemId:Score
UserId\tItemId:Score,ItemId:Score,ItemId:Score

等等..

我试图通过减去平均值并除以标准差来标准化分数。 我的数据存在于 S3 上,大约有 300 个文件或每个文件 30Mb。 我正在使用 PySpark。 这是我的尝试:

lines = sc.textFile("s3n://data-files/clustering")

Itr1 = lines.map(lambda x:str(x))

Itr1.take(3)

['1\t1:0.1,2:0.2', '2\t3:0.4,4:0.6', '3\t5:0.8,6:0.1']


Itr2 = Itr1.map(lambda x: x.split("\t"))

Itr2.take(3)

[['1', '1:0.1,2:0.2'], ['2', '3:0.4,4:0.6'], ['3', '5:0.8,6:0.1']]

ItemRecScore = Itr2.map(lambda x:[x[1]])

ItemRecScore.take(3)

[['1:0.1,2:0.2'], ['3:0.4,4:0.6'], ['5:0.8,6:0.1']]

ItemRecScoreClean = ItemRecScore.map(lambda x: x[0].replace(':',' '))

ItemRecScore.take(3)

['1 0.1,2 0.2', '3 0.4,4 0.6', '5 0.8,6 0.1']

1)我如何提取分数以便我可以调用, mean()stdev() 来计算参数。

2) 如何转换乐谱?

我是 PySpark 的新手,如果这是一项明显简单的任务,我深表歉意。 任何展示如何在 PySpark 中操作和聚合数据的指示或教程都会有所帮助。

最佳答案

由于每行输入都有多个分数,我们可以使用 flatMap 从每行中提取所有 itemids 和分数,并返回一个 RDD,其中每个元素都是 item & 之一分值。从那里我们可以提取分数并将其转换为 float ,以便 PySpark 的数值方法可以对其进行处理。完成此操作后,我们只需在 RDD 上调用 stats() 即可获取您感兴趣的信息。

inputData = sc.textFile(inputFile)
idScores = inputData.flatMap(lambda x: x.split("\t")[1].split(","))
scores = idScores.map(lambda x: float(x.split(":")[1]))
print scores.stats()

关于python - PySpark 中的聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275542/

相关文章:

python - 在 Python 中生成所有大小为 k 的子集(包含 k 个元素)

python - PySpark DataFrames - 使用不同类型的列之间的比较进行过滤

css - html5 样板文件不包括 reset.css?

python - 规范化多数据直方图

python - 如何从一个 QListWidget 拖放到另一个

python - Pandas 结合数据框

python - 如何在一个 .travis.yml 中测试 Python 和 C++,而不需要多次运行 C++?

mysql - Spark - 通过 Zeppelin EMR 连接到 mysql

apache-spark - Spark : save ordered data to parquet

path - 规范化路径 R Shiny 错误