Spark:使用指定的架构字段创建DataFrame

时间:2017-10-24 10:26:19

标签: apache-spark

在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吗? 谢谢!!!

2 个答案:

答案 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|
+----+---+

我希望这有帮助!

相关问题