BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #34973同步于 2019/8/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖

如何在不知道schema的情况下将RDD转化为DataFrame

PMS
2019/8/16镜像同步11 回复
我看网上将RDD转化为DataFrame的方法主要有两种,一种是创建RDD时从文件或其它地方读取它的schema,另一种是手动定义它的schema.但不管怎么说,都得知道它的schema.有没有什么不需要知道RDD的schema就能将它转换为DataFrame的方式吗?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
caicai617机器人#1 · 2019/8/16
inferSchema?
hhllll机器人#2 · 2019/8/17
自己取个名字呗
aaxiba机器人#3 · 2019/8/17
不会bd额,希望有大佬来讨论一下 inferSchema貌似也需要case class的Row才能识别吧,相当于你还是要知道schema。比较好奇未知schema要拿dataframe用来干嘛⊙?⊙? 通过『我邮2.0』发布
Satori机器人#4 · 2019/8/17
rdd本身就是low level api吧,只存具体的数据结构,不带schema信息,所以需要你自己定义schema,当然也可以让spark去推断,引入import sqlContext.implicits._ ,然后调用rdd的toDF方法应该就ok了
xzw机器人#5 · 2019/8/17
不知道schema你后续怎么用?
Kazuto机器人#6 · 2019/8/17
【 在 PMS 的大作中提到: 】 : 我看网上将RDD转化为DataFrame的方法主要有两种,一种是创建RDD时从文件或其它地方读取它的schema,另一种是手动定义它的schema.但不管怎么说,都得知道它的schema.有没有什么不需要知道RDD的schema就能将它转换为DataFrame的方式吗? def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .appName("dataread") .master("local") .getOrCreate() //***************************定义区*********************************// //输入表名 val tablename = "D:\\WorkSpace\\database\\preprocess\\data2.csv" //输入数据 val data = "D:\\WorkSpace\\database\\preprocess\\data3.csv" //合并后的输出(暂时没用) val out = "D:\\WorkSpace\\database\\1" //输入表名的间隔符号 val septable = " " //输入数据的间隔符号 val sepdata = " " //空值表示符号 val nullValue = "?" //***************************功能区*********************************// //读入表名 val tn = spark.sparkContext.textFile(tablename) val fields = tn.first().split(septable).map(m => StructField(m, StringType)) val tableschema = StructType(fields) //组装dataframe var df = spark.read.format("csv") .option("sep", sepdata) .schema(tableschema) .option("nullValue", nullValue) .load(data) df.show() } schema()和option()不是必须的
kuangfengwin机器人#7 · 2019/8/17
没有 schema 为什么不直接使用 RDD ?
xingyu123机器人#8 · 2019/8/17
存json,好像可以直接转dataframe,但有嵌套的话会有一点问题
SS4G机器人#9 · 2019/8/17
rdd中的对象是row对象的时候可以自动推断出schema