我一直在尝试根据键值将数据帧的结果添加为另一个数据帧中的新数组字段。
例如,我有这个数据框,我们称之为"images": [
{
"src": "http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_front.jpg",
"position": 0
},
{
"src": "http://demo.woothemes.com/woocommerce/wp-content/uploads/sites/56/2013/06/T_2_back.jpg",
"position": 1
}
:
df1
另一个数据框root
|-- DF_KEY: integer (nullable = false)
|-- DF_DESC: string (nullable = false)
+------------+--------------------+
|DF_KEY | DF_DESC |
+------------+--------------------+
| 10000|String Desc A |
| 10000|String Desc B |
:
df2
我想将两个数据帧与root
|-- DF_KEY: integer (nullable = false)
|-- COL_A: decimal(20,0) (nullable = true)
|-- COL_B: decimal(20,0) (nullable = true)
|-- COL_C: string (nullable = false)
的结果合并为一个新数组df1
,这将导致数据帧(ARRAY_OF_DF_DESC
)具有以下架构。
newDF
我尝试过加入:
root
|-- DF_KEY: integer (nullable = false)
|-- COL_A: decimal(20,0) (nullable = true)
|-- COL_B: decimal(20,0) (nullable = true)
|-- COL_C: string (nullable = false)
|-- ARRAY_OF_DF_DESC : array (nullable = false)
| |-- element: string (containsNull = false)
但是此加入仅为每个val otherRefsArray = df1.select($"DF_KEY", array(df1.columns.map(col): _*) as "ARRAY_OF_DF_DESC ")
val newDF = df2.join(otherRefsArray, "DF_KEY")
行向WrappedArray
数据框添加了一个df1
。并返回每个newDf
的重复记录。
如果可能,我希望传递一个DF_DESC
,其中包含与该行WrappedArray
相关联的所有DF_DESC
。有没有人知道如何用scala做到这一点?
答案 0 :(得分:1)
您可以使用var array = [1, 2, 3, 4, 5]
array.removeFirst(2)
print(array) // [3, 4, 5]
并为每个密钥收集一个列表。
groupBy()
然后,以与以前相同的方式使用val otherRefsArray = df1.groupBy($"DF_KEY")
.agg(collect_list($"DF_DESC").as("ARRAY_OF_DF_DESC"))
。