我在Spark中有一个数据框架,其中包含许多列和我定义的udf。我想要返回相同的数据帧,除了一列被转换。此外,我的udf接收字符串并返回时间戳。有一个简单的方法可以做到这一点吗?我试过了
val test = myDF.select("my_column").rdd.map(r => getTimestamp(r))
但这返回一个RDD,并且只返回转换后的列。
如果你真的需要使用你的功能,我可以建议两个选项:
>
使用map/toDF:
import 组织.apache.spark.sql.行导入sqlContext.implicits._
def getTimestamp:(字符串=
val test = myDF.select(“my_column”).rdd.map { case Row(string_val: String) =
使用自定义函数(UserDefinedFunction
):
进口org.apache.spark.sql.functions._
def getTimestamp:(字符串=
val newCol=udf(getTimestamp). application("my_column")) // 创建新列val test=myDF.withColumn("new_column", newCol)//将新列添加到原始DF
或者,
如果只想将字符串类型
列转换为时间戳类型列,
则可以使用 Spark SQL 1.5 中提供的unix_timestamp
列函数:
val test = myDF
.withColumn("new_column", unix_timestamp(col("my_column"), "yyyy-MM-dd HH:mm").cast("timestamp"))
注意:对于Spark 1.5. x,在转换为时间戳之前,需要将unix_timestamp
的结果乘以1000
(问题SPARK-11724)。生成的代码将是:
val test = myDF
.withColumn("new_column", (unix_timestamp(col("my_column"), "yyyy-MM-dd HH:mm") *1000L).cast("timestamp"))
编辑:添加自定义项选项
我有一个excel文件,看起来像这样: Header3包含如下所示的JSON字符串 我想解析JSON Header3列,并为每个键创建一个列,其中键的名称附加有键2的值,整个文件中的键始终相同。 结束数据帧应如下所示: 实例: 需要成为: 在进入花哨的东西之前,我试图至少规范化数据,但我得到了一个空序列。
问题内容: 我是Java的新手,想知道double转换为int cast如何工作吗?我知道,只需将低32位转换为int就很容易了,但是将double(64位)转换为int(32位)呢?来自二进制的double中的那64位是Double- precision浮点格式(Mantissa),那么它如何在内部转换为int? 问题答案: 所有这些都记录在JLS的5.1.3节中。 第一步,将浮点数转换为lon
我正试图从JSONB转换为Google GSON JSONElement。我使用的转换器来自:https://www.jooq.org/doc/3.11/manual/code-generation/custom-data-type-bindings/ TableImpl中的列:
我有一个Map,其中键是字符串,值是逗号分隔的值列表。 我如何才能逆转键/值对的顺序,并分配给新Map,使键成为值,值成为键 所以: 变成: 一种可能的解决方案是迭代每个值,然后迭代每个键,搜索相同的对应值。如果找到,将这个新的键/值对添加到一个新映射中。这似乎效率低下? 解决方案(使用公认的答案实施):
本文向大家介绍在JavaScript中NaN如何转换为String?,包括了在JavaScript中NaN如何转换为String?的使用技巧和注意事项,需要的朋友参考一下 您可以尝试运行以下命令以了解如何在JavaScript中将NaN转换为String- 示例
问题内容: 我要转换: 变成“ 5小时前” 如何用Java做到这一点? 问题答案: JodaTime支持从用户定义的格式进行解析。请参见DateTimeFormatterBuilder和DateTimeBuilder.parseDateTime()。 一旦有了DateTime,就可以从该时间和当前时间创建一个Duration或Period,并使用另一个格式化程序进行漂亮的打印。[请参阅上面的注释中