如何使用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中的数据
答案 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...|
+----------+-------+---+--------------------+