【问题标题】:Split SparkR dataframe into list of dataframes将 Spark 数据帧拆分为数据帧列表
【发布时间】:2017-12-04 18:08:38
【问题描述】:

我是 sparkR 的新手,并试图将 sparkR 数据帧拆分为基于列的数据帧列表。

数据有十亿条记录,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

数据框列表。

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]]] 中的错误:过滤谓词以外的表达式 提取运算符的第一个参数不支持 [ 或 子集()方法。

除了将 sparkDataframe 转换为 base R 之外,还有什么方法可以在 sparkR 中执行此操作。 因为将 sparkdataframe 转换为 base R 会导致内存错误并解决并行处理的问题。

非常感谢任何帮助。

【问题讨论】:

  • 回答没有帮助?

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


【解决方案1】:

您的问题有些不清楚;如果您打算拆分 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

现在,您可以将这 2 个 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    

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 2021-04-08
    • 2013-11-16
    相关资源
    最近更新 更多