如何在Spark中从字符串而不是文件创建数据框?

时间:2019-03-06 16:55:03

标签: scala apache-spark dataframe

此刻,我正在使用带有标题的制表符分隔文件来制作数据框,

val df = sqlContext.read.format("csv")
  .option("header", "true")
  .option("delimiter", "\t")
  .option("inferSchema","true").load(pathToFile)

我想做完全一样的事情,但要用字符串而不是文件。我该怎么办?

1 个答案:

答案 0 :(得分:0)

据我所知,没有内置的方法可以从字符串构建数据框。但是,出于原型制作目的,您可以从元组序列创建数据框。

您可以利用它从字符串中创建数据框。

scala> val s  ="x,y,z\n1,2,3\n4,5,6\n7,8,9"
s: String =
    x,y,z
    1,2,3
    4,5,6
    7,8,9
scala> val data = s.split('\n')

// Then we extract the first element to use it as a header.
scala> val header = data.head.split(',')
scala> val df = data.tail.toSeq
    // converting the seq of strings to a DF with only one column
    .toDF("X")
    // spliting the string
    .select(split('X, ",") as "X") 
    // extracting each column from the array and renaming them
    .select( header.indices.map( i => 'X.getItem(i).as(header(i))) : _*)

scala> df.show
+---+---+---+
|  x|  y|  z|
+---+---+---+
|  1|  2|  3|
|  4|  5|  6|
|  7|  8|  9|
+---+---+---+

ps:如果您不熟悉REPL,请确保编写此import spark.implicits._以便使用toDF()