列の1つがのリストのリストを含むR data.frameを持っています。つまり、各要素には整数のリストが埋め込まれています。 SparkRはエラーを返していますが、このdata.frameをSparkR DataFrameに変換したいと思います。ここでRのリストを要素とするSparkRデータフレーム
は、問題を与える例のRのdata.frameを作成する方法は次のとおりです。myDf
を見て
indices <- 1:4
myDf <- data.frame(indices)
myDf$data <- list(rep(0, 20))
は(私が期待するよう)次を与える:
> str(myDf)
'data.frame': 4 obs. of 2 variables:
$ indices: int 1 2 3 4
$ data :List of 4
..$ : num 0 0 0 0 0 0 0 0 0 0 ...
..$ : num 0 0 0 0 0 0 0 0 0 0 ...
..$ : num 0 0 0 0 0 0 0 0 0 0 ...
..$ : num 0 0 0 0 0 0 0 0 0 0 ...
> head(myDf)
indices data
1 1 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
2 2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
3 3 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
4 4 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
と作成しますSparkR DataFrameは実際にはエラーなしで実行されます:
library(SparkR, lib.loc=paste0(Sys.getenv("SPARK_HOME"),"/R/lib"))
sparkR.session(master = "local[*]")
mySparkDf <- as.DataFrame(myDf)
ただし、後続のoper mySparkDf
上ationsが動作していないようです:
> collect(mySparkDf)
17/07/13 17:23:00 ERROR executor.Executor: Exception in task 0.0 in stage 1.0 (TID 1)
java.lang.RuntimeException: Error while encoding: java.lang.RuntimeException:
java.lang.Double is not a valid external type for schema of array<double>
if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null
else validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 0, indices), IntegerType) AS indices#0
... long stack trace ...
スパークdocumentationによると、リストは実際には許可すべきですか?
> schema(mySparkDf)
StructType
|-name = "indices", type = "IntegerType", nullable = TRUE
|-name = "data", type = "ArrayType(DoubleType,true)", nullable = TRUE
スパーク2.2.0、R 3.4.0、Javaの1.8.0_131を使用する:偶数データフレームがリストが(正常)のArrayTypeとして格納されていることを示しているスパークのスキーマを見
アイデア?助けを前にありがとう!
ありがとうございました。これはSparkに機能要求を送信する問題だとお考えですか? – neilalex