在Spark中,创建case类以指定schema,然后从文件创建RDD并将其转换为DF。 e.g。
case class Example(name: String, age: Long)
val exampleDF = spark.sparkContext
.textFile("example.txt")
.map(_.split(","))
.map(attributes => Example(attributes(0), attributes(1).toInt))
.toDF()
问题是,如果txt文件中的内容类似于“ABCDE12345FGHIGK67890”,则不带任何符号或空格。如何为架构字段提取指定长度的字符串。例如提取名称的“BCD”和年龄的“23”。这可以使用map和split吗? 谢谢!!!
答案 0 :(得分:0)
在用逗号分割的map函数中,只需输入一个函数,将输入字符串转换为所需顺序的值列表。
答案 1 :(得分:0)
您可以使用subString
从特定索引中提取数据,如下所示
case class Example (name : String, age: Int)
val example = spark.sparkContext
.textFile("test.txt")
.map(line => Example(line.substring(1, 4), line.substring(6,8).toInt)).toDF()
example.show()
输出:
+----+---+
|name|age|
+----+---+
| BCD| 23|
| BCD| 23|
| BCD| 23|
+----+---+
我希望这有帮助!