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

问题描述 投票:0回答:1

有没有方便的方法将Dataframe从Spark转换为DL4j使用的类型?目前在DL4j算法中使用Daraframe我得到一个错误:“类型不匹配,预期:RDD [DataSet],actual:Dataset [Row]”。

scala apache-spark dl4j
1个回答
0
投票

通常,我们使用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

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

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

当我们进行转换时,它最终成为:原始数据 - >数字表示 - > ndarray

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

这将为您提供“数据集”您需要一对与输入数据和标签匹配的ndarray。那里的标签是相对于你正在解决的问题,无论是分类还是回归。

© www.soinside.com 2019 - 2024. All rights reserved.