拉丁的傳說(shuō)
2023-10-13 16:20:18
我使用 SPARK Java API 讀取文本文件,將其轉(zhuǎn)換為 JSON,然后對(duì)其應(yīng)用架構(gòu)。架構(gòu)可能會(huì)根據(jù)數(shù)據(jù)庫(kù)中的映射表而有所不同,這就是為什么我需要首先將文件轉(zhuǎn)換為 JSON,以便架構(gòu)映射不必按列順序。這是我所做的:// Defined the schema (basic representation)StructType myschema = new StructType().add("a", DataTypes.StringType, true) .add("b", DataTypes.StringType, true) .add("x", DataTypes.StringType, true) .add("y", DataTypes.IntegerType, true) .add("z", DataTypes.BooleanType, true);//Reading a pipe delimited text file as JSON, the file has less columns than myschemaDataset<String> data = spark.read().option("delimiter","|").option("header","true").csv(myFile).toJSON();上表返回類似這樣的內(nèi)容:data.show(false);|value|+----------------------------------------+| {"x":"name1","z":"true","y":"1234"}|| {"x":"name2","z":"false","y":"1445"}|| {"x":"name3","z":"true",:y":"1212"}|當(dāng)我運(yùn)行這個(gè)時(shí),我的問(wèn)題出現(xiàn)了:Dataset<Row> data_with_schema = spark.read().schema(myschema).json(data);因?yàn)槲业慕Y(jié)果變成了這樣:data_with_schema.show(false);|x|y|z|+-------+-------+-------+|null |null |null ||null |null |null ||null |null |null |我在 stackoverflow 上讀到這可能是因?yàn)槲以噲D將 json 字符串轉(zhuǎn)換為整數(shù)。但是,我嘗試將數(shù)據(jù)變量定義為行數(shù)據(jù)集而不是字符串?dāng)?shù)據(jù)集,但出現(xiàn)不兼容類型錯(cuò)誤。我不確定解決方法是什么或真正的問(wèn)題是什么。
3 回答

四季花海
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
找出問(wèn)題所在:
如果輸入文件中的數(shù)據(jù)無(wú)法應(yīng)用架構(gòu),則表中的所有數(shù)據(jù)都會(huì)返回 Null。例如:“1n”不可能轉(zhuǎn)換為整數(shù)。如果將 DataTypes.IntegerType 應(yīng)用于包含“1n”的列,則整個(gè)表都具有空值。

小怪獸愛(ài)吃肉
TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
我認(rèn)為發(fā)生這種情況是由于 JSON 和定義的架構(gòu)中的數(shù)據(jù)類型不匹配。例如,在 JSON 屬性中,“age”為整數(shù),但 schema 定義了“age”為 String 類型。由于這種不匹配,所有數(shù)據(jù)都為空。

躍然一笑
TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
不確定這是否有幫助,但在 Spark 中讀取 JSON 文件時(shí),請(qǐng)確保架構(gòu)和 JSON 文件中的列名稱完全匹配。否則它將顯示空值。
添加回答
舉報(bào)
0/150
提交
取消