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 所以你的字段 id 是强制性的。 不,如果我在 Tweet 类 id 中指定只要并且我从 json 中将它作为字符串,那么 ds.first() 之类的进一步操作会出错,并且会说没有找到实际的构造函数参数 啊,所以解析不起作用。所以这是因为 ID 字段是一个字符串。 问题是,当在 tweet.class 中定义为 long 时,如何将 ID 字段作为字符串提供 【参考方案1】:

我不知道您的代码不工作的确切原因,但如果您想更改文件类型,您可以编写您的 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() [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spark 中的共享变量

为啥 org.apache.spark.sql.types.DecimalType 在 Spark SQL 中的最大精度值为 38?

apache spark中的sortbykey

Spark改进|Apache Spark 3.0中的SQL性能改进概览

forEach Spark Scala 中的错误:值选择不是 org.apache.spark.sql.Row 的成员

Apache Spark 和 Apache Flink 中的“流”是啥意思?