apache spark -数据框架的indexOf功能



我有一个列类型为String的表。我想获得另一列,其中包含链的一部分,由字符"-"的位置定义。

示例:列的值为YX- 1f2,我想将YX作为列。

这是我到目前为止所尝试的:

 application_rules.where((application_rules("apprul_cd_fare_basis").contains("-")===true) && (application_rules("apprul_cd_fare_basis").startsWith("-")===false) && (application_rules("apprul_cd_fare_basis").endsWith("-")===false))
 .select(application_rules("apprul_cd_fare_basis"), application_rules("apprul_cd_fare_basis").substr(0, application_rules("apprul_cd_fare_basis").toString().indexOf("-")))
 .show()

但这对我不起作用,因为我总是indexOf("-")函数返回-1。知道我的错是什么,怎么解决吗?

问题是:

application_rules("apprul_cd_fare_basis").toString().indexOf("-")

这里的toString()函数返回所选列的标题,这里是apprul_cd_fare_basis。这不是你期望的价值。所以indexOf("-")不是在值中搜索,而是在列标题中搜索。

<<p> 解决方案/strong>

如果您只想添加一列,其中包含从字符串中提取的部分(例如,从YX-1F2中提取YX),您可以简单地这样做:

import org.apache.spark.sql.functions.substring_index
application_rules.withColumn(
    "newColumnName",
    substring_index(application_rules("apprul_cd_fare_basis"), "-", 1)
    )
结果

+--------------------+-------------+
|apprul_cd_fare_basis|newColumnName|
+--------------------+-------------+
|              YX-1F2|           YX|
|              AB-0G1|           AB|
+--------------------+-------------+

相关内容

  • 没有找到相关文章

最新更新