【问题标题】:creating an empty dataframe创建一个空的数据框
【发布时间】:2020-01-20 10:39:54
【问题描述】:

因为我是新手,所以我有一个简单的疑问
我必须创建一个空数据框,稍后我必须根据某些条件填充它。

我已经经历了许多创建空数据框的问题,但是以下这些方法之间有什么区别

我所接近的我不知道它是否正确

def function1(df: DataFrame): DataFrame = {
    var newdf:DataFrame= null;
    if(!x._2(0).column.trim.isEmpty){
          newdf= spark.sql("SELECT f_name,l_name FROM tab1");
        }else{
          newdf= spark.sql("SELECT address,zipcode FROM tab1");
        }

    newdf
  }

上述方法在本地运行时没有给我任何错误,不知道何时涉及集群。
但我发现了其他方法,他们创建了一个具有指定架构的空数据框,如下所示:

val my_schema = StructType(Seq(
    StructField("field1", StringType, nullable = false),
    StructField("field2", StringType, nullable = false)
  ))

val empty: DataFrame = spark.createDataFrame(spark.sparkContext.emptyRDD[Row], my_schema)

但我的问题是我没有预定义的架构,并且生成的数据框可能是与运行时相关的任何架构,我不知道架构的外观。



如果我采用方法 1 或任何我遗漏的东西,有什么问题吗?

【问题讨论】:

  • 欢迎来到 SO!您能否分享您需要如何/何时填充 DataFrame?这样我们就有更多的内容来讨论如何处理模式。
  • 我有一个Map[String,String],我正在根据值进行迭代,即如果值为空,则如果条件将执行,否则将执行。同样,我的地图可能包含 n 号。 k 和 v,我想要最后一个结果数据帧。
  • 编辑了问题有一些错字
  • 你面临的错误是什么......从你的问题中不清楚
  • val df = spark.emptyDataFrame .. 将创建空数据框而不指定架构

标签: scala apache-spark


【解决方案1】:

尽量避免使用 vars 的语法。数据框是不可变的集合,Scala 允许创建表达式以创建数据框。类似于以下代码:

def function2(df0: DataFrame)(spark: SparkSession): DataFrame = {
  val df = {
      if(!x._2(0).column.trim.isEmpty){
        spark.sql("SELECT f_name,l_name FROM tab1")
      } else {
        spark.sql("SELECT address,zipcode FROM tab1")
      }
    }
    df
  }

您可以从字符串数组创建一个数据框,其中每个元素都是一个列名:

val columnNames: List[String] = List("column1", "column2")

// All dataframe columns are of type string
val schema = columnNames.map(StructField(_, StringType, nullable = true))

spark.createDataFrame(spark.sparkContext.emptyRDD[Row], schema)

如果您还有另一个更复杂的用例,请编辑您的问题并添加更具体的内容...

【讨论】:

    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2020-06-14
    • 1970-01-01
    • 2019-02-02
    • 2020-11-03
    相关资源
    最近更新 更多