2016-12-10 82 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") 
相關問題