将SparkR数据帧拆分为数据帧列表

时间:2017-11-19 15:54:44

标签: apache-spark-sql spark-dataframe sparkr

我是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会导致内存错误,并且会导致并行处理问题。

非常感谢任何帮助。

1 个答案:

答案 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