Scala DataFrameReader有一个函数“option”,它具有以下签名:
def option(key: String, value: String): DataFrameReader
// Adds an input option for the underlying data source.
那么什么是底层数据源的“输入选项”,有人可以在这里分享一个如何使用这个函数的例子吗?
答案 0 :(得分:4)
可用选项列表因文件格式而异。它们记录在DataFrameReader
API docs。
例如:
ul
加载JSON文件(每行一个对象)并将结果作为DataFrame返回。
此函数通过输入一次以确定输入模式。如果您事先知道架构,请使用指定架构的版本以避免额外扫描。
您可以设置以下特定于JSON的选项来处理非标准JSON文件:
def json(paths: String*): DataFrame
(默认primitivesAsString
):将所有原始值推断为字符串类型false
(默认prefersDecimal
):将所有浮点值推断为十进制类型。如果值不适合十进制,那么它将它们推断为双精度。false
(默认allowComments
):忽略JSON记录中的Java / C ++样式注释false
(默认allowUnquotedFieldNames
):允许不带引号的JSON字段名称false
(默认allowSingleQuotes
):除双引号外还允许使用单引号true
(默认allowNumericLeadingZeros
):允许数字前导零(例如00012)false
(默认allowBackslashEscapingAnyCharacter
):允许使用反斜杠报价机制接受所有字符的引用false
(默认mode
):允许在解析过程中处理损坏记录的模式。
PERMISSIVE
:在遇到损坏的记录时将其他字段设置为PERMISSIVE
,并将格式错误的字符串放入由null
配置的新字段中。当用户设置架构时,它会为额外字段设置columnNameOfCorruptRecord
。null
:忽略整个损坏的记录。DROPMALFORMED
:遇到损坏的记录时会抛出异常。FAILFAST
(默认值为columnNameOfCorruptRecord
中指定的值):允许重命名具有spark.sql.columnNameOfCorruptRecord
模式创建的格式错误字符串的新字段。这会覆盖PERMISSIVE
。
答案 1 :(得分:3)
def option(key: String, value: String): DataFrameReader = {
this.extraOptions += (key -> value)
this
}
其中extraOptions
只是Map
并且使用方式如下:
private def jdbc(
url: String,
table: String,
parts: Array[Partition],
connectionProperties: Properties): DataFrame = {
val props = new Properties()
// THIS
extraOptions.foreach { case (key, value) =>
props.put(key, value)
}
// connectionProperties should override settings in extraOptions
props.putAll(connectionProperties)
val relation = JDBCRelation(url, table, parts, props)(sqlContext)
sqlContext.baseRelationToDataFrame(relation)
}
如您所见,它只是一种将附加属性传递给jdbc
驱动程序的方法。
还有更通用的options
方法来传递Map
而不是单个键值及其在Spark documentation中的使用示例:
val jdbcDF = sqlContext.read.format("jdbc").options(
Map("url" -> "jdbc:postgresql:dbserver",
"dbtable" -> "schema.tablename")).load()
答案 2 :(得分:0)
sparkSession.read.option("header",true).parquet(fileKey)
在上述代码段中,Header = True表示:保留列标题。