我在HDFS上有一个文本文件,我想将其转换为Spark中的数据框。
我正在使用Spark上下文加载文件,然后尝试从该文件生成单独的列。
val myFile = sc.textFile("file.txt")
val myFile1 = myFile.map(x=>x.split(";"))
完成此操作后,我正在尝试以下操作。
myFile1.toDF()
我遇到了一个问题,因为myFile1 RDD中的元素现在是数组类型。
我该如何解决这个问题?
更新-从Spark 1.6开始,您可以简单地使用内置的csv数据源:
spark: SparkSession = // create the Spark Session
val df = spark.read.csv("file.txt")
您还可以使用各种选项来控制CSV解析,例如:
val df = spark.read.option("header", "false").csv("file.txt")
对于Spark版本<1.6:最简单的方法是使用spark-csv-将其包含在依赖项中并遵循README,它允许设置自定义定界符(;
),可以读取CSV标头(如果有),并且可以推断出模式类型(需要额外扫描数据)。
另外,如果您知道该模式,则可以创建一个表示该模式的案例类,然后将RDD元素映射到该类的实例中,然后再转换为DataFrame,例如:
case class Record(id: Int, name: String)
val myFile1 = myFile.map(x=>x.split(";")).map {
case Array(id, name) => Record(id.toInt, name)
}
myFile1.toDF() // DataFrame will have columns "id" and "name"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句