我有两个列表,如下所示:
输入栏:
List(col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13)
输入数据:
List(
Map(col2 -> dummy string, col7 -> 2016-01-01, col11 -> 2011-01-01),
Map(col2 -> dummy string, col7 -> 2018-01-01, col11 -> 2018-01-01),
Map(col2 -> dummy string, col7 -> 2018-04-01, col11 -> 2018-04-01),
Map(col2 -> dummy string, col7 -> 2016-01-01, col11 -> 2016-01-01)
)
我想做的是在我都遍历它们两个之后生成一个字符串。因此,如果colX名称匹配,则在Map中为其提供值,否则为其提供NULL。
因此,在上面的示例中,我将循环4次,创建4个将返回的字符串:
(Null, dummy string, Null, Null, Null, Null,2016-01-01, Null) ..etc..
我想到开始如下。遍历输入列的列表,然后遍历输入数据的每个键,但是我觉得这是一个公平的方法。
inputColumns.foreach(column => {
inputData.foreach{ case (k,v) =>
// I get a constructor cannot be instantiated to expected type error
}
})
null
在Scala中通常不鼓励使用,这就是为什么我建议将此映射到的原因List[Option[String]]
。这将允许从转换后的数据的功能调用中安全地受益。
因此,假设您具有以下初始值:
private val columns =
List("col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9", "col10", "col11", "col12", "col13")
private val input = List(
Map("col2" -> "dummy string", "col7" -> "2016-01-01", "col11" -> "2011-01-01"),
Map("col2" -> "dummy string", "col7" -> "2018-01-01", "col11" -> "2018-01-01"),
Map("col2" -> "dummy string", "col7" -> "2018-04-01", "col11" -> "2018-04-01"),
Map("col2" -> "dummy string", "col7" -> "2016-01-01", "col11" -> "2016-01-01")
)
我们可以将它们转换List
为List[Option[String]]
,其中每个子列表都对应于原始列表Map
:
val rows = input.map(originalMap =>
columns.map(column => originalMap.get(column))
)
每行看起来像
List(None, Some(dummy string), None, None, None, None, Some(2016-01-01), None, None, None, Some(2011-01-01), None, None)
如果仍然要使用空值:
val resultWithNulls = rows.map(row => row.map(_.getOrElse(null)))
给像这样的行:
List(null, "dummy string", null, null, null, null, "2016-01-01", null, null, null, "2011-01-01", null, null)
而且,如果要将可选内容转换为类似CSV的字符串,它仍然很简单:
val resultAsCsvString = rows.map(row => row.map(_.getOrElse("")).mkString(","))
// List(
// ",dummy string,,,,,2016-01-01,,,,2011-01-01,,",
// ",dummy string,,,,,2018-01-01,,,,2018-01-01,,", ...
// )
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句