我有一个带有多个单字符分隔符的输入数据,如下所示:
col1data1"col2data1;col3data1"col4data1
col1data2"col2data2;col3data2"col4data2
col1data3"col2data3;col3data3"col4data3
在上述数据中,["] ,[;] 是我的分隔符。
sparkSQL中是否有任何方法可以直接将输入数据(在文件中)转换为列名col1,col2,col3,col4的表
答案是否定的,spark-sql 不支持多分隔符,但一种方法是尝试将文件读取到 RDD 中,然后使用常规拆分方法解析它:
val rdd : RDD[String] = ???
val s = rdd.first()
// res1: String = "This is one example. This is another"
假设您想在空格和点分隔符上拆分。
因此,我们可以考虑将函数应用于我们的s
值,如下所示:
s.split(" |\.")
// res2: Array[String] = Array(This, is, one, example, "", This, is, another)
现在我们可以在整个rdd
上应用该功能:
rdd.map(_.split(" |\."))
数据示例:
scala> val s = "col1data1"col2data1;col3data1"col4data1"
scala> s.split(";|"")
res4: Array[String] = Array(col1data1, col2data1, col3data1, col4data1)
有关字符串拆分的更多信息:
- 一个 Scala 拆分字符串示例。
- 如何在 Scala 中拆分字符串,但保持部分与正则表达式匹配?
请记住,您可以应用于常规数据类型的所有内容都可以应用于整个RDD,那么您所要做的就是将RDD转换为DataFrame。