以R列表作为元素的SparkR数据帧

以R列表作为元素的SparkR数据帧,r,apache-spark,spark-dataframe,sparkr,R,Apache Spark,Spark Dataframe,Sparkr,我有一个R data.frame,其中一列包含整型列表,也就是说,它的每个元素都嵌入了整型列表。我想将这个data.frame转换为SparkR数据帧,尽管SparkR返回了一个错误 下面是如何创建一个示例R data.frame,该示例给出了问题: indices <- 1:4 myDf <- data.frame(indices) myDf$data <- list(rep(0, 20)) 从中创建SparkR数据帧实际上执行时不会出错: library(SparkR,

我有一个R data.frame,其中一列包含整型列表,也就是说,它的每个元素都嵌入了整型列表。我想将这个data.frame转换为SparkR数据帧,尽管SparkR返回了一个错误

下面是如何创建一个示例R data.frame,该示例给出了问题:

indices <- 1:4
myDf <- data.frame(indices)
myDf$data <- list(rep(0, 20))
从中创建SparkR数据帧实际上执行时不会出错:

library(SparkR, lib.loc=paste0(Sys.getenv("SPARK_HOME"),"/R/lib"))
sparkR.session(master = "local[*]")

mySparkDf <- as.DataFrame(myDf)
根据Spark的说法,名单实际上应该被允许吗?即使查看Spark数据帧的模式,也会发现列表(成功)存储为ArrayType:

> schema(mySparkDf)
StructType
|-name = "indices", type = "IntegerType", nullable = TRUE
|-name = "data", type = "ArrayType(DoubleType,true)", nullable = TRUE
使用Spark 2.2.0、R3.4.0、Java1.8.0131


有什么想法吗?提前感谢您的帮助

我在执行后尝试了这段代码,但在转换为sparkdataframe.ie时出错

Error in structField.character(names[[i]], types[[i]], TRUE) : 
  Field type must be a string.
我认为myDf无法转换为sparkdataframe。
您可以转换mySparkDf我认为您需要首先在R中规范化您的数据。我得到了与@midhunxavier相同的错误。阵列式双电源在spark r中存在故障。您是否考虑过先在R中使用purr包来规范化您的数据?这里有一个可能有用的链接:

谢谢。你认为这是向Spark发送功能请求的问题吗?非常感谢。是的,实际上现在我的解决方法是将所有列表元素移动到data.frame中它们自己的列中。。。但是,由于我的数据是半结构化的,所以维护嵌入的列表会方便得多。。。当你说,“数组类型双是火花r的麻烦”。。。这是一个bug吗?我认为SparkR目前不支持
array
类型……无论是由双精度或字符串组成的数组还是其他类型的数组……这就是为什么我说它们会带来很多麻烦。但是,如果您将数据帧转换为JSON,然后将其读入SparkR 2.2.0+并使用
as.JSON.array
选项,我认为可能需要解决这个问题。看一看2174线附近。fromJSON命令可能在这里有所帮助,但我不是100%确定。我不想让你走上一条无路可走的路,但也许这会有帮助。。。
> schema(mySparkDf)
StructType
|-name = "indices", type = "IntegerType", nullable = TRUE
|-name = "data", type = "ArrayType(DoubleType,true)", nullable = TRUE
Error in structField.character(names[[i]], types[[i]], TRUE) : 
  Field type must be a string.