用类型的猪地图将数据导入到Spark DataFrame中



因此,我正在尝试将带有类型猪映射的数据导入到火花数据框架中,而我找不到有关如何将映射数据爆炸到3列中的任何内容名字:街,城市和州。我可能正在寻找错误的事情。现在,我可以使用structType和structField选项将它们导入3列。

val schema = StructType(Array(
   StructField("id", IntegerType, true),
   StructField("name", StringType, true),
   StructField("address", StringType, true))) #this is the part that I need to explode

val data = sqlContext.read.format("com.databricks.spark.csv")
     .option("header", "false")
     .option("delimiter", ";")
     .schema(schema)
     .load("hdfs://localhost:8020/filename")

我需要从:

中制作5列的数据行
328;Some Name;[street#streetname,city#Chicago,state#IL]

我需要做什么才能将地图爆炸到3列中,以便ID基本上具有5列的新数据框架?我刚开始火花,我从未使用过猪。我只发现这是通过搜索结构[键#值]的猪图。

我正在使用Scala使用Spark 1.6。谢谢您的帮助。

我对猪的格式不太熟悉(甚至可能有库),但是一些出色的时装弦乐操纵似乎有效。实际上,您可能必须进行一些错误检查,否则您将获得索引之外的范围错误。

val data = spark.createDataset(Seq(
(328, "Some Name", "[street#streetname,city#Chicago,state#IL]")
)).toDF("id", "name", "address")
data.as[(Long, String, String)].map(r => {
    val addr = (r._3.substring(1, r._3.length - 1)).split(",")
    val street = addr(0).split("#")(1)
    val city = addr(1).split("#")(1)
    val state = addr(2).split("#")(1)
    (r._1, r._2, street, city, state)
}).toDF("id", "name", "street", "city", "state").show()

导致

+---+---------+----------+-------+-----+
| id|     name|    street|   city|state|
+---+---------+----------+-------+-----+
|328|Some Name|streetname|Chicago|   IL|
+---+---------+----------+-------+-----+

但是,我不是100%与Spark 1.6的兼容性。您最终可能需要映射Dataframe(与.as[]调用相反,而不是Dataset),然后从匿名.map()函数中的Row对象中提取单个值。整体概念应该相同。

相关内容

  • 没有找到相关文章

最新更新