【发布时间】:2019-12-13 16:48:04
【问题描述】:
我有一个数据框,它有一列,值与一些分隔符连接,现在我想分成多列,最多可以接近 1000-2000 列,记录数可以是 6000 万左右。我正在努力寻找最好的方法来做到这一点,所以性能不会受到影响。
我有以下方法,但是,如果有更好的方法来实现这一点,有人可以建议吗?
val df = Seq(("1|2|3|4|5|6|7|8|9")).toDF("data")
val df2 = df1.withColumn("_tmp", split(col("data"), "\\|"))
df2.select( $"_tmp".getItem(0).as("col1"),
$"_tmp".getItem(1).as("col2"),
$"_tmp".getItem(2).as("col3"),
$"_tmp".getItem(3).as("col4")).drop("_tmp")
提前非常感谢。
【问题讨论】:
-
在我头上,因为你只提到了一列。为什么在加载数据本身时不能使用相同的逻辑来拆分数据,并且这些数据将作为列读取,并且您可以为相同的定义架构。
-
我正在从hbase表中读取数据,所以每个数据集都作为一个列限定符存储在hbase表中,无论哪种方式都会出现性能问题,所以试图找到最好的方法。
标签: scala dataframe apache-spark apache-spark-sql