use*_*482 12 java dataframe apache-spark apache-spark-sql
这应该很简单,但....使用Spark 1.6.1 ....我有DataFrame#1,列A,B,C.值:
A B C
1 2 A
2 2 A
3 2 B
4 2 C
Run Code Online (Sandbox Code Playgroud)
然后我用新列D创建一个新的数据帧,所以:
DataFrame df2 = df1.withColumn("D", df1.col("C"));
Run Code Online (Sandbox Code Playgroud)
到目前为止这么好但我实际上希望D列中的值是有条件的,即:
// pseudo code
if (col C = "A") the col D = "X"
else if (col C = "B") the col D = "Y"
else col D = "Z"
Run Code Online (Sandbox Code Playgroud)
然后,我将删除C列并将D重命名为C.我已经尝试查看Column函数,但似乎没有任何内容符合要求.我想过使用df1.rdd().map()并迭代这些行,但除了实际上并没有让它工作之外,我有点认为DataFrames的重点是要远离RDD抽象?
不幸的是我必须用Java做这个(当然Spark和Java并不是最优的!!).似乎我错过了明显的东西,很高兴在提出解决方案时被证明是个白痴!
Dan*_*ula 19
我相信你可以when用来实现这一目标.此外,您可能可以直接替换旧列.对于您的示例,代码将类似于:
import static org.apache.spark.sql.functions.*;
Column newCol = when(col("C").equalTo("A"), "X")
.when(col("C").equalTo("B"), "Y")
.otherwise("Z");
DataFrame df2 = df1.withColumn("C", newCol);
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息when,请查看ColumnJavadoc.
| 归档时间: |
|
| 查看次数: |
25101 次 |
| 最近记录: |