Spark数据框爆炸列

时间:2018-06-12 23:53:44

标签: scala apache-spark join apache-spark-sql

数据框中的每一行都包含一个csv格式的字符串line加上另一个简单的字符串,所以我最后想要得到的是一个由{{1}提取的字段组成的数据框。 }字符串和line。 所以我按照以下步骤来爆炸category字符串

line

最后,我设法获得一个由行字段组成的新数据框,但我无法将val df = stream.toDF("line","category") .map(x => x.getString(0))...... 返回到新数据框 我无法使用初始数据框加入新数据框,因为公共字段category最初不是单独的列。

输入样本:

id

输出样本:

line                           | category 
"'1';'daniel';'dan@gmail.com'" | "premium"

任何建议,提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果问题中提到的nn.Maxpool2d列中的字符串结构是固定的,那么在使用line内置函数将字符串拆分为数组然后最终选择数组和别名中的元素以获取最终的数据帧

split

应该给你

import org.apache.spark.sql.functions._
df.withColumn("line", split(col("line"), ";"))
  .select(col("line")(0).as("id"), col("line")(1).as("name"), col("line")(2).as("email"), col("category"))
  .show(false)

我希望答案很有帮助