我有 1000 个传感器,我需要对数据进行分区(即每天每个传感器),然后将每个数据点列表提交给 R 算法)。使用 Spark,简化示例如下所示:
//Spark
val rddData = List(
("1:3", List(1,1,456,1,1,2,480,0,1,3,425,0)),
("1:4", List(1,4,437,1,1,5,490,0)),
("1:6", List(1,6,500,0,1,7,515,1,1,8,517,0,1,9,522,0,1,10,525,0)),
("1:11", List(1,11,610,1))
)
case class DataPoint(
key: String,
value: List[Int]) // 4 value pattern, sensorID:seq#, seq#, value, state
我转换为镶木地板文件,保存它。在 SparkR 中加载镶木地板,没问题,架构说:
#SparkR
df <- read.df(sqlContext, filespec, "parquet")
schema(df)
StructType
|-name = "key", type = "StringType", nullable = TRUE
|-name = "value", type = "ArrayType(IntegerType,true)", nullable = TRUE
所以在 SparkR 中,我有一个数据框,其中每条记录都有我想要的所有数据(df$value)。我想将该数组提取到 R 可以使用的东西中,然后用一个包含结果数组的新列来改变我的原始数据帧(df)。逻辑上类似于结果 = 函数(df$value)。然后我需要将结果(所有行)返回到 SparkR 数据帧中以进行输出。
如何从 SparkR 数据帧中提取一个数组,然后根据结果进行变异?