将 Dataframe 从 Spark 转换为 DL4j 使用的类型

Converting Dataframe from Spark to the type used by DL4j

有没有方便的方法将Dataframe从Spark转换成DL4j使用的类型?目前在 DL4j 的算法中使用 Daraframe 我收到一个错误: "type mismatch, expected: RDD[DataSet], actual: Dataset[Row]".

通常,我们为此使用 datavec。如果你愿意,我可以为你指出例子。 Dataframes 做出了太多的假设,使其太脆弱而无法用于现实世界的深度学习。

除此之外,数据框通常不是表示线性代数的良好抽象。 (比如处理图片的时候掉下来)

我们在这里与 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

但一般来说,数据集就像 numpy 一样只是一对 ndarray。如果您必须使用 spark 工具,并且只想在最后一英里使用 ndarray,那么我的建议是让数据框匹配某种形式的纯数字模式,将其映射到 ndarray "row"。

一般来说,我们这样做的一个重要原因是因为我们所有的 ndarrays 都在堆外。 Spark 在使用数据管道和使用 JVM 处理不该做的事情(矩阵数学)方面有很多限制——我们采用了一种不同的方法,使我们能够有效地使用 gpus 和其他一些东西。

当我们进行这种转换时,结果是: 原始数据 -> 数值表示 -> ndarray

可以 做的是将数据帧映射到 double/float 数组,然后使用 Nd4j.create(float/doubleArray) 或者你也可以做: someRdd.map(inputFloatArray -> new DataSet(Nd4j.create(yourInputArray),yourLabelINDARray))

这会给你一个 "dataset" 你需要一对与你的输入数据和标签相匹配的 ndarrays。 那里的标签与您要解决的问题类型有关,无论是分类问题还是回归问题。