【发布时间】:2017-02-08 05:06:53
【问题描述】:
我正在尝试编写一个 Scala 函数,该函数可以根据提供的输入字符串推断 Spark DataTypes:
/**
* Example:
* ========
* toSparkType("string") => StringType
* toSparkType("boolean") => BooleanType
* toSparkType("date") => DateType
* etc.
*/
def toSparkType(inputType : String) : DataType = {
var dt : DataType = null
if(matchesStringRegex(inputType)) {
dt = StringType
} else if(matchesBooleanRegex(inputType)) {
dt = BooleanType
} else if(matchesDateRegex(inputType)) {
dt = DateType
} else if(...) {
...
}
dt
}
我的目标是支持大部分可用的DataTypes,如果不是全部的话。当我开始实现这个功能时,我开始思考:“Spark/Scala 可能已经有一个 helper/util 方法可以为我做这件事。” 毕竟,我知道我可以做类似的事情:
var structType = new StructType()
structType.add("some_new_string_col", "string", true, Metadata.empty)
structType.add("some_new_boolean_col", "boolean", true, Metadata.empty)
structType.add("some_new_date_col", "date", true, Metadata.empty)
Scala 和/或 Spark 都会将我的 "string" 参数隐式转换为 StringType 等。所以我问:我可以用 Spark 或 Scala 做些什么来帮助我实现转换器方法?
【问题讨论】:
-
您这样做的用例是什么? Spark 已经推断出大多数底层数据源的模式和数据类型。您是否希望实现自己的数据源?
-
我不太明白你的问题,你能像萨钦说的那样解释一个用例吗?你想从一个字符串推断???我不明白。
标签: scala apache-spark types spark-dataframe introspection