修改spark DataFrame列

时间:2017-05-18 14:43:52

标签: apache-spark dataframe

我想更改以下数据框:

If (Not String.IsNullOrEmpty(_spaRef)) And (Not String.IsNullOrEmpty(_cusRef)) Then
    Using adpt As New SoftwareSolutions_DataSetTableAdapters.view_SpaCreditDifferencesTableAdapter
        Dim dt = adpt.GetAdjustmentsListByIndex(_spaRef, _cusRef).Rows
        For Each dr As DataRow In dt
            lbxAdjustments.Items.Add(dr("adjNumber").ToString())
        Next
    End Using
End If

到以下数据框:

--id--rating--timestamp--
-------------------------
| 0 | 5.0  |  231312231 |
| 1 | 3.0  |  192312311 | #Epoch time (seconds from 1 Thursday, 1 January 1970)
-------------------------

我怎么能这样做?

2 个答案:

答案 0 :(得分:5)

使用内置函数很容易

import org.apache.spark.sql.functions._;
import spark.implicits._
val newDF = dataset.withColumn("timestamp", month(from_unixtime('timestamp)));

请注意,DataFrame是不可变的,因此您可以创建新的DataFrame但不能修改。当然,您可以将此数据集分配给同一个变量。

注意数字2:DataFrame =数据集[行],这就是我使用这两个名字的原因

答案 1 :(得分:1)

如果您来自scala,可以在Dataframe.selectDataframe.withClumn方法中使用sql.functions方法,对于您的情况,我认为方法month(e: Column): Column可以执行您想要的更改。它会是这样的:

import org.apache.spark.sql.functions.month
df.withColumn("timestamp", month("timestamp") as "month")

我相信在JavaPythonR

中有相同的方式