apache-spark - 如何在 Spark 中生成大字数文件?
问题描述
我想为性能测试生成 1000 万行的字数文件(每行都有相同的句子)。但我不知道如何编码。
您可以给我一个示例代码,并直接将文件保存在 HDFS 中。
解决方案
你可以尝试这样的事情。
生成 1 列,其值从 1 到 100k 和 1 列,值从 1 到 100 用explode(column) 将它们都炸开。您无法生成一列具有 10 Mil 值的列,因为 kryo 缓冲区会引发错误。
我不知道这是否是最好的性能方式,但这是我现在能想到的最快方式。
val generateList = udf((s: Int) => {
val buf = scala.collection.mutable.ArrayBuffer.empty[Int]
for(i <- 1 to s) {
buf += i
}
buf
})
val someDF = Seq(
("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
).toDF("sentence")
val someDfWithMilColumn = someDF.withColumn("genColumn1", generateList(lit(100000)))
.withColumn("genColumn2", generateList(lit(100)))
val someDfWithMilColumn100k = someDfWithMilColumn
.withColumn("expl_val", explode($"mil")).drop("expl_val", "genColumn1")
val someDfWithMilColumn10mil = someDfWithMilColumn100k
.withColumn("expl_val2", explode($"10")).drop("genColumn2", "expl_val2")
someDfWithMilColumn10mil.write.parquet(path)
推荐阅读
- excel - 如何自动填充活动单元格的列直到最后一行
- r - R中的文本挖掘/单词相关性
- c# - 使用 Identity Server 3 缓存外部身份验证 InMemory
- angular - 从应用程序外部调用 Angular Route
- javascript - 从 dateTime 字符串中获取时间
- javascript - Angular:如何操作数据响应
- embedded - SPI同步的想法
- angularjs - AngularJS 指令的动态(通配符)选择器
- file-io - 你能打开一个已经被同一个程序中的另一个函数打开的文件吗?
- c# - 在 CollectionView 中滚动不会保持 Switch 切换选择