我是sparkR的新手,并尝试根据列将sparkR数据帧拆分为Dataframes列表。
这些数据有十亿条记录Sls_D(date), mdse_item_i(item id), co_loc_i(location id), traffic_ti_8_00, traffic_ti_9_00, traffic_ti_10_00, traffic_ti_11_00
(每个记录都没有特定小时的流量)。
数据快照:
sls_d co_loc_i mdse_item_i traffic_ti_8_00 traffic_ti_9_00 traffic_ti_10_00 traffic_ti_11_00
1 2016-10-21 1592 4694620 1 113 156 209
2 2016-10-21 1273 4694620 1 64 152 249
3 2016-10-21 1273 15281024 1 64 152 249
4 2016-10-21 1498 4694620 2 54 124 184
5 2016-10-21 1498 15281024 2 54 124 184
期望的输出:
sls_d co_loc_i mdse_item_i traffic_ti_8_00 traffic_ti_9_00 traffic_ti_10_00 traffic_ti_11_00
2016-10-21 4 4694620 3 67 145 283
Dataframes列表。
d.2 = split(data.2.2,list(data.2.2$mdse_item_i,data.2.2$co_loc_i,data.2.2$sls_d))
x [ind [[k]]]中的错误:除过滤谓词之外的表达式 提取运算符的第一个参数[或 subset()方法。
除了将sparkDataframe转换为base R之外,还有什么方法可以在sparkR中执行此操作 将sparkdataframe转换为base R会导致内存错误,并且会导致并行处理问题。
非常感谢任何帮助。
答案 0 :(得分:0)
你的问题有点不清楚;如果您要拆分 Spark 数据框的列,则应使用select
。以下是使用SparkR 2.2中的iris
数据的示例:
df <- as.DataFrame(iris) # Spark dataframe
df
# SparkDataFrame[Sepal_Length:double, Sepal_Width:double, Petal_Length:double, Petal_Width:double, Species:string]
# separate the length-related & width-related columns into 2 Spark dataframes:
df_length = select(df, 'Sepal_Length', 'Petal_Length')
df_width = select(df, 'Sepal_Width', 'Petal_Width')
head(collect(df_width)) # for demonstration purposes only
# Sepal_Width Petal_Width
# 1 3.5 0.2
# 2 3.0 0.2
# 3 3.2 0.2
# 4 3.1 0.2
# 5 3.6 0.2
# 6 3.9 0.4
现在,您可以将这两个 Spark 数据帧放入 R 列表中,但我不确定这将是多么有用 - 任何列表可能有意义的操作无法使用 [评论后编辑]:
my_list = c(df_length, df_width)
head(collect(my_list[[1]]))
# Sepal_Length Petal_Length
# 1 5.1 1.4
# 2 4.9 1.4
# 3 4.7 1.3
# 4 4.6 1.5
# 5 5.0 1.4
# 6 5.4 1.7