当前位置: 首页 > 知识库问答 >
问题:

如何从字符串而不是文件在Spark中制作Dataframe?[复制]

周兴朝
2023-03-14

目前,我正在从一个带有标题的制表符分隔文件制作一个数据帧,就像这样。

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

我想做完全相同的事情,但使用字符串而不是文件。我该怎么做?

共有1个答案

施梓
2023-03-14

据我所知,没有内置的方法可以从字符串构建数据帧。然而,出于原型设计的目的,您可以从元组序列创建数据帧。

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

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中,请确保编写此导入spark.implicits._以便使用toDF()

 类似资料:
  • 如何在spark数据帧中用空字符串替换空字符串。 我尝试了以下方法: 它抛给我一个错误。

  • 我有这个。我想创建一个,它保存如下 但是通过这样做 问题是每个现在都保存为。例如,第3行是 对于那些怀疑论者,我尝试了,它是。第2列工作正常。 如何保存为每行,而不是?也就是说,我如何保存所有行的作为而不是?

  • 问题内容: 我在bash中有以下字符串 我想从创建一个。该包含重复直到长度= 20这样的结果应该是这样的: 在bash中如何做? 问题答案: 这应该工作:

  • 问题内容: 我有以下代码: 我如何获取它来解析包含在字符串而不是文件中的XML? 问题答案: 我的代码库中有此功能,它应该对你有用。

  • 所以,我意识到我要问的问题与一个一次又一次被打死的话题有关,然而,即使在阅读了我能找到的所有答案和留档后,我仍然对字符串实习有点困惑。也许是因为我对JVM缺乏了解;也许是因为Java7中引入的变化贬低了前面提到的许多答案和留档。不管怎样,我都被卡住了,我希望有人能帮我更清楚地理解这个概念... 在上面的示例中,我知道将创建两个字符串对象。我还了解到,内存中只有一个包含序列“t”、“e”、“x”和“