簡體   English   中英

Databrick實木復合地板轉換

[英]Databricks parquet conversion

我正在使用數據塊進行鑲木地板轉換。 該文件以^ A分隔。 我在創建DF時明確提到了這一點,如下所示。 但是,當我在數據中得到一個^ M字符時,該字符在那里終止並給出了格式錯誤的行異常。 有人可以建議我如何處理嗎?

記錄中的樣本部分
推出^一些文本在這里; ^ M ^ M獎勵:更多文本; ^ A0.00

val dataframe = sparkSession.sqlContext.read
                    .format("com.databricks.spark.csv")
                    .option("delimiter", "\U0001")
                    .option("header", "false")
                    .option("mode","FAILFAST")
                    .option("treatEmptyValuesAsNulls","true")
                    .option("nullValue"," ")
                    .option("quote","")
                    .option("ignoreLeadingWhiteSpace", "true")
                    .option("ignoreTrailingWhiteSpace", "true")
                    .schema(schema)
                    .load(fileLocation)

錯誤在失敗模式下的行格式錯誤:展開^此處出現一些文本;

您也可以通過使用sparkContext獲取dataframe sparkContext ,如下所示

val dataframe = sparkSession.sparkContext.textFile(fileLocation).map(line => line.split("\\^A")).map(array => (array(0).trim, array(1).trim, array(2).trim)).toDF

dataframe.show(false)

輸出是

+-------+-------------------------------------------------+----+
|_1     |_2                                               |_3  |
+-------+-------------------------------------------------+----+
|Rollout|some text comes here;^M ^M Rewards:somemore text;|0.00|
+-------+-------------------------------------------------+----+

更新

你評論了

但是我們正在建立一個可處理1000多個表的通用框架,我們正在尋找更通用的解決方案

為此,您可以創建一個架構使用該架構創建一個數據框 我盡了最大的努力

//read the file
val rdd = sc.textFile(fileLocation).map(line => line.split("\\^A"))
//create schema
val schema = StructType(rdd.first().indices.map(x => StructField("col_"+(x+1), StringType)))

//create dataframe
sqlContext.createDataFrame(rdd.map(Row.fromSeq(_)), schema).show(false)

這應該給你

+-------+-------------------------------------------------+-----+
|col_1  |col_2                                            |col_3|
+-------+-------------------------------------------------+-----+
|Rollout|some text comes here;^M ^M Rewards:somemore text;|0.00 |
+-------+-------------------------------------------------+-----+

所以現在列號取決於數據中有多少^A

我希望答案是有幫助的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM