在Spark Dataframe字段中存储简单映射

时间:2018-04-11 20:34:11

标签: scala apache-spark

我有一些JSON数据,我想在Spark Dataframe中以解析的形式存储(意思是Map [String,Any])。

有没有办法做到这一点?我认为它涉及一个编码器,但我不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

不是有用的方式。您可以将强类型Dataset与Kryo编码器

一起使用
import org.apache.spark.sql.{Encoder, Encoders}

implicit val mapStrAnyEnc: Encoder[Map[String, Any]] = Encoders.kryo
Seq(Map("foo" -> 1.0, "bar" -> "foo")).toDS.show

// +--------------------+
// |               value|
// +--------------------+
// |[35 01 02 40 01 0...|
// +--------------------+

但是如果你想使用DataFrames,那么像这样的表示的值几乎为零。

异构对象的自然映射为struct,但如果字段数量很大或无限制,则最佳选择是使用Map[String, String]并仅在需要时解析值。