有什么方便的方法可以将 Dataframe 从 Spark 转换为 DL4j 使用的类型?目前在 DL4j 算法中使用 Daraframe 时出现错误:“类型不匹配,预期:RDD [DataSet],实际:Dataset [Row]”。
1 回答
通常,我们为此使用 datavec。如果您愿意,我可以为您指出示例。数据框做了太多假设,使其太脆弱而无法用于现实世界的深度学习。
除此之外,数据框通常不是表示线性代数的良好抽象。(例如在处理图像时它会掉下来)
我们在这里与 spark.ml 进行了一些互操作:https ://github.com/deeplearning4j/deeplearning4j/blob/master/deeplearning4j/deeplearning4j-scaleout/spark/dl4j-spark-ml/src/test/java/org/deeplearning4j/ spark/ml/impl/SparkDl4jNetworkTest.java
但总的来说,数据集只是一对 ndarray,就像 numpy 一样。如果您必须使用火花工具,并且只想在最后一英里使用 ndarray,那么我的建议是让数据框匹配某种形式的纯数字模式,将其映射到 ndarray“行”。
一般来说,我们这样做的一个重要原因是因为我们所有的 ndarray 都在堆外。Spark 在处理数据管道和将 JVM 用于不应该做的事情(矩阵数学)时有很多限制——我们采用了不同的方法,允许我们有效地使用 gpus 和其他一些东西。
当我们进行转换时,它最终是:原始数据 -> 数值表示 -> ndarray
你可以做的是将数据帧映射到双/浮点数组,然后使用 Nd4j.create(float/doubleArray) 或者你也可以这样做: someRdd.map(inputFloatArray -> new DataSet(Nd4j.create(yourInputArray),yourLabelINDARray) )
这会给你一个“数据集”你需要一对匹配你的输入数据和标签的ndarrays。那里的标签与您要解决的问题类型有关,无论是分类还是回归。