如何使用Scala在Spark中对行类型的RDD进行拆分
我在HDFS上有一个文件如何使用Scala在Spark中对行类型的RDD进行拆分,scala,apache-spark,Scala,Apache Spark,我在HDFS上有一个文件json,我读过: var data = sqlContext.read.json("/.....") 下面是它的模式: |-- @timestamp: string (nullable = true) |-- beat: struct (nullable = true) | |-- hostname: string (nullable = true) | |-- name: string (nullable = true) | |-- ve
json
,我读过:
var data = sqlContext.read.json("/.....")
下面是它的模式:
|-- @timestamp: string (nullable = true)
|-- beat: struct (nullable = true)
| |-- hostname: string (nullable = true)
| |-- name: string (nullable = true)
| |-- version: string (nullable = true)
|-- fields: struct (nullable = true)
| |-- env: string (nullable = true)
| |-- env2: string (nullable = true)
| |-- env3: struct (nullable = true)
| | |-- format: string (nullable = true)
| | |-- name: string (nullable = true)
| | |-- version: double (nullable = true)
|-- input_type: string (nullable = true)
|-- text: string (nullable = true)
我想拆分字段文本
,我尝试了:
var myRDD = data.select("text").rdd
var split_myRDD = myRDD.map(ligne => ligne.split("|"))
它不起作用:错误:值拆分不是org.apache.spark.sql.Row的成员
有人能告诉我哪里出了故障吗?你不需要为此转换为RDD。您可以在DF中使用split函数。代码如下所示
df.select("text")
.withColumn("text_split", split(col("text"), "\\|"))
如果有特殊需要,还可以使用RDD,并使用“\\\\\”分割文本。我希望它能有所帮助。当您阅读JSON时,生成的对象是一个数据帧。将数据帧转换为RDD时,将有一个[Row]数组。Row类描述数据帧中的一行,并具有与数据帧相同的模式。要能够从行中提取元素,应执行以下操作:
myRDD
.map(row => row.getString(row.fieldIndex("text")).split("|"))
myRDD
属于RDD[Row]
类型。应用.split()
时,需要从行
中获取实际值。使用var split\u myRDD=myRDD.map(ligne=>ligne.getAs[String](0).split(“|”)
它可以工作,但它只显示两个字段:value和in-field元素?我找不到所有其余的字段。你说其余的字段是什么意思?当我打印Schemayes时,它显示:root |--value:array(nullable=true)|--element:string(containsnall=true),但是你需要什么?从原始json输入中分离的值以及剩余的列?