Apache Spark 中的 Printschema() [重复]
Posted
技术标签:
【中文标题】Apache Spark 中的 Printschema() [重复]【英文标题】:Printschema() in Apache Spark [duplicate] 【发布时间】:2018-04-30 09:28:35 【问题描述】:Dataset<Tweet> ds = sc.read().json("/path").as(Encoders.bean(Tweet.class));
Tweet class :-
long id
string user;
string text;
ds.printSchema();
输出:-
root
|-- id: string (nullable = true)
|-- text: string (nullable = true)
|-- user: string (nullable = true)
json 文件包含所有字符串类型的参数
我的问题是接受输入并将其编码为 Tweet.class
。在架构中为 id 指定的数据类型是 Long 但在打印架构时它被转换为 String
。
它是否为它如何读取文件或根据我们所做的编码(此处为 Tweet.class)提供 printscheme a/c?
【问题讨论】:
我认为架构是从文件中确定的,所以它找到了一个字符串。但是“as”方法将其转换为long。别担心,你的结果是一个 Dataset我不知道您的代码不工作的确切原因,但如果您想更改文件类型,您可以编写您的 customSchema。
val schema = StructType(List
(
StructField("id", LongType, nullable = true),
StructField("text", StringType, nullable = true),
StructField("user", StringType, nullable = true)
)))
您可以将架构应用到您的数据框,如下所示:
Dataset<Tweet> ds = sc.read().schema(schema).json("/path")
ds.printSchema()
【讨论】:
"id":"572692378957430785,""user":"Srkian_nishu :)","text":"@always_nidhi @YouTube 不,我不明白,我喜欢音乐,他们的舞蹈很棒这个 mve 的歌在摇摆” 这里的 id 是一个字符串,这是一个原因吗? 因为一旦操作数据并从 id 中删除引号,例如 "id":572692378957430785,"user":"Srkian_nishu :)","text":"@always_nidhi @YouTube no i dnt理解 bt 我喜欢音乐,他们的舞蹈很棒,这个 mve 的所有歌曲都在摇摆” 现在它正确地给了我答案 id:long 这可能是原因,最好替换id中的引号并使用。 我可能会做,或者我可能更喜欢键入 cast 但这不是问题问题是当我指定 ENCODERS.bean(Tweet.class) 时它仍然给我 id:string以上是关于Apache Spark 中的 Printschema() [重复]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 org.apache.spark.sql.types.DecimalType 在 Spark SQL 中的最大精度值为 38?
Spark改进|Apache Spark 3.0中的SQL性能改进概览