如何将 RDD 数组字符串转换为数据帧
How to convert an RDD array string to a dataframe
请帮我将下面的 IP 地址 RDD 数组转换为数据帧。
(完全披露:我使用 RDD 的经验很少)
RDD 创建:
val SCND_RDD = FIRST_RDD.map(kv => kv._2).flatMap(r => r.get("ip")).map(o => o.asInstanceOf[scala.collection.mutable.Map[String, String]]).flatMap(ip => ip.get("address"))
SCND_RDD.take(3)
结果:
SCND_RDD: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[33] at flatMap at <console>:38
res87: Array[String] = Array(5.42.212.99, 51.34.21.60, 63.99.831.7)`
我的 rdd<->dataframe 转换尝试:
case class X(callId: String)
val userDF = SCND_RDD.map{case Array(s0)=>X(s0)}.toDF()
这是我得到的错误
defined class X
<console>:40: error: scrutinee is incompatible with pattern type;
found : Array[T]
required: String
val userDF = NIPR_RDD22.map{case Array(s0)=>X(s0)}.toDF()
我发表的评论是一个重复的问题,可能会对您有所帮助。
不过这里我也留下我的试用期
val rdd = sc.parallelize(Array("test", "test2", "test3"))
rdd.take(3)
//res53: Array[String] = Array(test, test2, test3)
val df = rdd.toDF()
df.show
+-----+
|value|
+-----+
| test|
|test2|
|test3|
+-----+
请帮我将下面的 IP 地址 RDD 数组转换为数据帧。
(完全披露:我使用 RDD 的经验很少)
RDD 创建:
val SCND_RDD = FIRST_RDD.map(kv => kv._2).flatMap(r => r.get("ip")).map(o => o.asInstanceOf[scala.collection.mutable.Map[String, String]]).flatMap(ip => ip.get("address"))
SCND_RDD.take(3)
结果:
SCND_RDD: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[33] at flatMap at <console>:38
res87: Array[String] = Array(5.42.212.99, 51.34.21.60, 63.99.831.7)`
我的 rdd<->dataframe 转换尝试:
case class X(callId: String)
val userDF = SCND_RDD.map{case Array(s0)=>X(s0)}.toDF()
这是我得到的错误
defined class X
<console>:40: error: scrutinee is incompatible with pattern type;
found : Array[T]
required: String
val userDF = NIPR_RDD22.map{case Array(s0)=>X(s0)}.toDF()
我发表的评论是一个重复的问题,可能会对您有所帮助。
不过这里我也留下我的试用期
val rdd = sc.parallelize(Array("test", "test2", "test3"))
rdd.take(3)
//res53: Array[String] = Array(test, test2, test3)
val df = rdd.toDF()
df.show
+-----+
|value|
+-----+
| test|
|test2|
|test3|
+-----+