scala从Map转换为数据帧

时间:2017-09-22 13:59:03

标签: scala

如何使用schemanames中提到的架构详细信息将input5数据格式转换为dataFrame ..转换应该是动态的,而不使用Row(r(0),r(1)) 列数可以在输入和模式中增加或减少,因此代码应该是动态的

case class Entry(schemaName: String, updType: String, ts: Long, row: Map[String, String])

val input5 = List(Entry("a","b",0,Map("col1 " -> "0000555", "ref" -> "2017-08-12 12:12:12.266528")))  

val schemanames= "col1,ref"     

目标数据框应仅来自输入5的地图..如col 1和ref可以有许多其他列,如col2,col3 ...如果Map中有更多列,则模式名称中将提及相同的列。 模式名称变量应该用于创建结构,input5.row(Map)应该是数据源...因为模式名称中的列数可以是100,同样适用于Input5.row中的数据

2 个答案:

答案 0 :(得分:0)

以下是此

的代码
case class Entry(schemaName: String, updType: String, ts: Long, row: Map[String, String])
val input5 = List(Entry("a","b",0,Map("col1 " -> "0000555", "ref" -> "2017-08-12 12:12:12.266528")))
import spark.implicits._
val df = input.toDF 

df将成为数据帧。

答案 1 :(得分:0)

您可以直接拨打电话。

scala> case class Entry(schemaName: String, updType: String, ts: Long, row: Map[String, String])
defined class Entry
scala> val input5 = List(Entry("a","b",0,Map("col1 " -> "0000555", "ref" -> "2017-08-12 12:12:12.266528")))  
input5: List[Entry] = List(Entry(a,b,0,Map(col1  -> 0000555, ref -> 2017-08-12 12:12:12.266528)))

scala> val df = input5.toDF
df: org.apache.spark.sql.DataFrame = [schemaName: string, updType: string ... 2 more fields]

scala> df.show
+----------+-------+---+--------------------+
|schemaName|updType| ts|                 row|
+----------+-------+---+--------------------+
|         a|      b|  0|Map(col1  -> 0000...|
+----------+-------+---+--------------------+