这段代码是我在https://spark.apache.org/docs/latest/mllib-statistics.html编辑的“摘要统计”。具体来说,我使用pDataI = mat.zipWithIndex().filter(lambda x: x[1] > 0).map(lambda x: x[0])
过滤字符串和浮点值的混合
分解:
mat.zipWithIndex() is O(sizeOf mat)
filter(lambda x: x[1] > 0) is O(sizeOf mat)
map(lambda x: x[0]) is O(sizeOf mat)
我似乎在进行大量的计算,只是为了把第一行从 收藏。你知道吗
完整代码:
import numpy as np
from pyspark.mllib.stat import Statistics
data = []
data.append('c1,c2,c3')
data.append(np.array([1.0, 10.0, 100.0]))
data.append(np.array([2.0, 20.0, 200.0]))
data.append(np.array([3.0, 30.0, 300.0]))
mat = sc.parallelize(
data
) # an RDD of Vectors
pDataI = mat.zipWithIndex().filter(lambda x: x[1] > 0).map(lambda x: x[0])
summary = Statistics.colStats(pDataI)
print(summary.mean()) # a dense vector containing the mean value for each column
print(summary.variance()) # column-wise variance
print(summary.numNonzeros()) # number of nonzeros in each column
print pDataI.stats();
印刷品:
[ 2. 20. 200.]
[ 1.00000000e+00 1.00000000e+02 1.00000000e+04]
[ 3. 3. 3.]
(count: 3, mean: [ 2. 20. 200.], stdev: [ 0.81649658 8.16496581 81.64965809], max: [ 3. 30. 300.], min: [ 1. 10. 100.])
是否可以改进这一点,只在一次传递中处理mat
集合?你知道吗
就我而言,数据帧总是比RDD更好的解决方案。我将假设在真实的工作环境中,您的数据存储在某种文件或集合中,或者其他任何形式(csv、parquet、json等)。现在让我们假设一个csv。在这种情况下,您只需执行以下操作:
在那里,您可以使用
df.describe()
获得摘要统计信息。你知道吗Here是DataFrameReader的文档,包括您可以读入的所有文件类型和集合。你知道吗
相关问题 更多 >
编程相关推荐