[英]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.