我在json中有以下数据结构,我试图使用AWS Glue将其放入 Dataframe 中:
{
"out": [
{
"attr": [ "a1", "a2", "a3" ],
"val": [ 1, 2, 3 ],
"text": "test1"
},
{
"attr": [ "a4", "a5", "a6" ],
"val": [ 4, 5, 6 ],
"text": "test2"
}
],
"ids": [
"id1",
"id2"
]
}
“ids”字段是一个与“out”中的条目并行的数组。我一直在尝试获得以下内容:
id text attr val
-- ---- ---- ---
id1 test1 [a1, a2, a3] [1,2,3]
id2 test2 [a4, a5, a6] [4,5,6]
我已经能够将“out”的id和内容拆分成两个 Dataframe ,但是我找不到一种方法将它们水平连接起来。
使用
spark_context = SparkContext.getOrCreate()
glue_context = GlueContext(spark_context)
spark = glue_context.spark_session
print("Loading data...")
df = spark.read.json(<location>)
df.printSchema()
我得到了以下模式:
root
|-- out: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- attr: array (nullable = true)
| | | |-- element: string (containsNull = true)
| | |-- val: array (nullable = true)
| | | |-- element: double (containsNull = true)
| | |-- text: string (nullable = true)
|-- id: array (nullable = true)
| |-- element: string (containsNull = true)
2条答案
按热度按时间kuarbcqp1#
使用 Dataframe API,
8hhllhi22#
在我的例子中,我使用spark SQL,但是我确信你也可以用plain pyspark来实现它。关键的想法是使用
arrays_zip
函数。还有zip_with
,你可能想看看。退货: