java - 使用 Java 读取 CSV 文件包含 Spark 中的结构类型
问题描述
我正在尝试为程序编写测试用例。为此,我正在读取一个包含以下格式数据的 CSV 文件。
account_number,struct_data
123456789,{"key1":"value","key2":"value2","keyn":"valuen"}
987678909,{"key1":"value0","key2":"value20","keyn":"valuen0"}
数百个这样的行。
我需要将第二列作为结构阅读。但我得到了错误
struct type expected, string type found
我尝试转换为 StructType,然后收到错误为“StringType 无法转换为 StructType”。
我应该改变我的 CSV 的方式吗?我还可以做些什么?
解决方案
我在 Scala Spark 中给出了我的解决方案,它可能会为您的查询提供一些见解
scala> val sdf = """{"df":[{"actNum": "1234123", "strType": [{"key1": "value1", "key2": "value2"}]}]}"""
sdf: String = {"df":[{"actNum": "1234123", "strType": [{"key1": "value1", "key2": "value2"}]}]}
scala> val erdf = spark.read.json(Seq(sdf).toDS).toDF().withColumn("arr", explode($"df")).select("arr.*")
erdf: org.apache.spark.sql.DataFrame = [actNum: string, strType: array<struct<key1:string,key2:string>>]
scala> erdf.show()
+-------+-----------------+
| actNum| strType|
+-------+-----------------+
|1234123|[[value1,value2]]|
+-------+-----------------+
scala> erdf.printSchema
root
|-- actNum: string (nullable = true)
|-- strType: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- key1: string (nullable = true)
| | |-- key2: string (nullable = true)
推荐阅读
- python - 如何在python中使用翻译
- docker - 在 CI/CD 中如何管理前端和后端之间的依赖关系?
- android - 如何在网格布局中调整列的大小?
- proxy - Nexus 3:原始代理存储库对于包含 % 的 url 失败
- wix - 如何更改将安装所有 dll 和其他文件的 wxs 文件中的目录?
- java - TCP数据每20ms发送一次
- ios - HomeKit - 当我从后台返回到前台时,如何更新附件 isReachable 值?
- docker - Swarm 中的 Jenkins Docker Swarm 插件
- c# - LottieUWP 嵌入到 Xamarin.Forms
- java - Java 仅从每个键的一项中获取所有可能的组合