【问题标题】:Split a data frame into two or more data frames in Scala using spark [duplicate]在Scala中使用spark将一个数据帧拆分为两个或多个数据帧[重复]
【发布时间】:2016-12-02 09:19:39
【问题描述】:

我有一个包含 200 万条记录的数据集。我想把它分成 2 个相等的一半。我没有任何带有序列号的列,因此我可以对其应用 where 条件并将其拆分为 2。这也可能不是正确的方法,但我想要做的就是将数据帧拆分为 2 半

我正在使用的示例代码:

var invoiceData = sc.textFile("/Scala/InvoiceLine.csv");
def removeheader (x : RDD[String]): RDD[String] = {
  x.mapPartitionsWithIndex((idx, lines) => {
    if (idx == 0) {
      lines.drop(1)
    }
    lines
  })
}
var invoiceWithoutHeader = removeheader(invoiceData);
var invoiceSchemaString = invoiceData.first().toUpperCase().split(",").map(_.trim());
var invoiceSchema = StructType(invoiceSchemaString.map(fieldName => StructField(fieldName, StringType, true)))
var invoiceRowRDD = invoiceWithoutHeader.map(y => {
  var parser = new CSVParser(',');
  parser.parseLine(y)
}).map { x => Row.fromSeq(x) } 
var invoiceDF = sqlContext.applySchema(invoiceRowRDD, invoiceSchema);

现在我想将 invoiceDF 分成 2 部分,每部分 100 万 由于我是初学者,代码可能效率不高。

提前致谢:)

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    如果随机化数据不是问题,您可以使用randomSplit()

    val Array(half1, half2) = invoiceDF.randomSplit(Array(0.5, 0.5))
    

    【讨论】:

    • 非常感谢。随机化不是问题。
    • 有没有办法在不随机化的情况下进行拆分?我想根据某些条件进行拆分,例如列值 >= 0.5
    • 如果你有一些条件,那么你可以使用过滤功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2013-11-16
    相关资源
    最近更新 更多