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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Dataframe从Spark转换为DL4j使用的类型相关的知识,希望对你有一定的参考价值。

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

答案

通常,我们使用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。那里的标签是相对于你正在解决的问题,无论是分类还是回归。

以上是关于将Dataframe从Spark转换为DL4j使用的类型的主要内容,如果未能解决你的问题,请参考以下文章

如何将 BigQuery SQL 查询结果转换为 Spark DataFrame?

将Spark Dataframe转换为Scala Map集合

将 RDD 转换为 DataFrame Spark Streaming 时的 ClassCastException

将包含 BigInt 的 RDD 转换为 Spark Dataframe

使用 pandas_udf 将 Spark Structured DataFrame 转换为 Pandas

将 CSV 数据加载到 Dataframe 并使用 Apache Spark (Java) 转换为 Array