2016-12-10 37 views
-2

我需要将列转换为行。请帮助我在Spark Scala code.input文件中的下列要求是|分隔符和value.based的逗号分隔符,我需要把它们转换成排Apache Spark - 解析数据并将列转换为行

我输入记录的有柱逗号分隔符之一:

C11 | C12 | A,B | C14

C21 | C22 | A,C,d | C24

预期输出:

一个,C11,C12,C14

b,C11,C12,C14

一个,C21,C22,C24

C,C21,C22,C24

d,C21,C22,C24

谢谢,

希瓦

回答

0

首先读出的数据框为带有|的csv作为分隔符:

这提供了一个数据框与您需要的基本列,除了第三个将是一个字符串。假设您将此列重命名为_c2(第三列的默认名称)。现在你可以拆分字符串来获得数组了 我们也删除了以前的列,因为我们不再需要它了。 最后,我们使用爆炸到阵列转向行和删除未使用的列

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") 

或阶(游离形式)

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") 
相关问题