【发布时间】:2015-08-27 04:25:53
【问题描述】:
我在本地机器上比较 R 和 Apache Spark 的性能,R 似乎做得更好。那是因为我没有使用集群还是我做错了什么?
创建数据 (create_data.R):
options = commandArgs(trailingOnly = TRUE)
rows = as.numeric(options[1])
perday = 365 / (rows-1) * 6
dates = seq(as.Date('2010-01-01'), as.Date('2015-12-31'), by=perday)
rows = length(dates)
ids = sample(paste0("ID", seq(1:10000)), rows, replace=TRUE)
sales = rpois(rows,50)
categories = sample(paste("Category", sprintf("%02d",seq(1:10))), rows, replace=TRUE)
data = data.frame(dates, ids, sales, categories)
write.csv(data, "/home/phil/performance/data.csv", row.names=FALSE)
测试 R (cut.R):
suppressMessages(suppressWarnings(require(dplyr, quietly=TRUE)))
data = read.csv("data.csv")
first_purchase = head(data[order(data$dates, data$ids),],1)
print(first_purchase)
测试 Spark (cut.py):
from pyspark import SparkContext
sc = SparkContext("local")
rdd = sc.textFile("data.csv", 2)
# Get rid of header
header = rdd.take(1)[0]
rdd = rdd.filter(lambda line: line != header)
rdd = rdd.map(lambda line: line.split(","))
first_purchase = rdd.takeOrdered(1, lambda x: [x[0],x[1]])[0]
print(first_purchase)
运行完整测试 (run_tests.sh):
echo "Creating data"
Rscript create_data.R 5000000
wc -l data.csv
echo "Testing R"
time Rscript cut.R
echo "Testing Spark"
time spark-submit cut.py
测试输出:
$ . run_test.sh
Creating data
5000001 data.csv
Testing R
dates ids sales categories
1264 2010-01-01 ID10 60 Category 01
real 0m12.689s
user 0m12.498s
sys 0m0.187s
Testing Spark
[u'2010-01-01', u'"ID10"', u'60', u'"Category 01"']
real 0m17.029s
user 0m7.388s
sys 0m0.392s
我在一个 Ubuntu 上以 Windows 7 作为主机系统的 VirtualBox 运行它,如果这会有所不同的话。
【问题讨论】:
标签: r performance sorting apache-spark