我有一个问题,即使用三个3列将一行转换为3行
例如:
<pre>
<b>ID</b> | <b>String</b> | <b>colA</b> | <b>colB</b> | <b>colC</b>
<em>1</em> | <em>sometext</em> | <em>1</em> | <em>2</em> | <em>3</em>
</pre>
&#13;
我需要将其转换为:
<pre>
<b>ID</b> | <b>String</b> | <b>resultColumn</b>
<em>1</em> | <em>sometext</em> | <em>1</em>
<em>1</em> | <em>sometext</em> | <em>2</em>
<em>1</em> | <em>sometext</em> | <em>3</em>
</pre>
&#13;
我只有dataFrame,它与第一个模式(表)相关联。
val df: dataFrame
注意:我可以使用RDD来完成,但我们还有其他方法吗?感谢
答案 0 :(得分:1)
假设df具有您的第一个片段的架构,我会尝试:
@IBOutlet var backButtonView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let backButton = UIBarButtonItem(customView: self.backButtonView)
self.backButtonView.heightAnchor.constraint(equalToConstant: 44).isActive = true // if you set more than you'll get "Unable to simultaneously..."
self.backButtonView.widthAnchor.constraint(equalToConstant: 75).isActive = true
self.navigationItem.leftBarButtonItem = backButton
}
我还想保留列名,你可以使用一个技巧,包括创建一个包含值和名称数组的数组列。首先创建表达式
df.select($"ID", $"String", explode(array($"colA", $"colB",$"colC")).as("resultColumn"))
然后使用val expr = explode(array(array($"colA", lit("colA")), array($"colB", lit("colB")), array($"colC", lit("colC"))))
(因为你不能在嵌套表达式上使用生成器,你需要2 getItem
)
select
虽然有点冗长,但可能会有更优雅的方式来做到这一点。