我有一个带有一些数据的json文件,我能够从中创建DataFrame,并且我感兴趣的特定部分的模式如下所示:
val json: DataFrame = sqlc.load("entities_with_address2.json", "json")
root
|-- attributes: struct (nullable = true)
| |-- Address2: array (nullable = true)
| | |-- value: struct (nullable = true)
| | | |-- Zip: array (nullable = true)
| | | | |-- element: struct (containsNull = true)
| | | | | |-- value: struct (nullable = true)
| | | | | | |-- Zip5: array (nullable = true)
| | | | | | | |-- element: …Run Code Online (Sandbox Code Playgroud) 我有两张桌子,即table1和table2.table1很大,而table2小.另外,我有一个UDF函数,其接口定义如下:
--table1--
id
1
2
3
--table2--
category
a
b
c
d
e
f
g
UDF: foo(id: Int): List[String]
Run Code Online (Sandbox Code Playgroud)
我打算首先调用UDF获取相应的类别:foo(table1.id),它将返回一个WrappedArray,然后我想加入每个category进行table2更多的操作.预期结果应如下所示:
--view--
id,category
1,a
1,c
1,d
2,b
2,c
3,e
3,f
3,g
Run Code Online (Sandbox Code Playgroud)
我试图在Hive中找到一个不需要的方法,但没有运气,有人可以帮助我吗?谢谢!
我使用Databricks spark-xml包将一个XML文件读入Spark.该文件具有以下数据结构:
<lib>
<element>
<genre>Thriller</genre>
<dates>
<date>2000-10-01</date>
<date>2020-10-01</date>
</dates>
</element>
<element>
<genre>SciFi</genre>
<dates>
<date>2015-10-01</date>
</dates>
</element>
</lib>
Run Code Online (Sandbox Code Playgroud)
加载数据后,我得到一个看起来像这样的数据框:
root
|-- genre: string (nullable = true)
|-- publish_dates: struct (nullable = true)
| |-- publish_date: array (nullable = true)
| | |-- element: string (containsNull = true)
Run Code Online (Sandbox Code Playgroud)
并且"show"产生以下结果:
gerne | dates
Th... | [WrappedArray(20...
Run Code Online (Sandbox Code Playgroud)
是否有可能以下列形式获得此结果:
gerne | date
Th... | 2000-...
Th... | 2020-...
Sci.. | 2015-...
Run Code Online (Sandbox Code Playgroud)
我已经尝试过:
val rdd = df.select("genre", "dates").rdd.map(row => (row(0), row(1))).flatMapValues(_.toString)
Run Code Online (Sandbox Code Playgroud)
和
val rdd = df.select("genre", …Run Code Online (Sandbox Code Playgroud)