我需要将列转换为行。请帮我解决spark scala code.input文件中的以下要求。分隔符和其中一个具有逗号分隔符值的列。基于逗号分隔符我需要将它们转换为行
我的输入记录:
C11 | C12 | A,B | C14
C21 | C2 2 | A,C,D | C24
预期产出:
一个,C11,C12,C14
B,C11,C12,C14
一个,C21,C22,C24
C,C21,C22,C24
d,C21,C22,C24
谢谢,
希瓦
答案 0 :(得分:0)
首先使用|将数据帧读取为csv作为分隔符:
这提供了一个数据帧,其中包含您需要的基本列,除了第三个是字符串。假设您将此列重命名为_c2(第三列的默认名称)。现在您可以拆分字符串以获取数组 我们也删除了之前的专栏,因为我们不再需要它了。 最后,我们使用explode将数组转换为行并删除未使用的列
from pyspark.sql.functions import split
from pyspark.sql.functions import explode
df1 = spark.read.csv("pathToFile", sep="|")
df2 = df1.withColumn("splitted", split(df1["_c2"],",")).drop("_c2")
df3 = df2.withColumn("exploded", explode(df2["splitted"])).drop("splitted")
或scala(自由形式)
import org.apache.spark.sql.functions.split
import org.apache.spark.sql.functions.explode
val df1 = spark.read.csv("pathToFile", sep="|")
val df2 = df1.withColumn("splitted", split(df1("_c2"),",")).drop("_c2")
val df3 = df2.withColumn("exploded", explode(df2("splitted"))).drop("splitted")