基于pyspark中的现有列值创建新列

基于pyspark中的现有列值创建新列,pyspark,apache-spark-sql,pyspark-dataframes,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有一个数据框,它有一个带有机场名称的现有列,我想用它们的缩写创建另一个列 例如,我有一个具有以下值的现有列: SEATTLE TACOMA AIRPORT, WA US MIAMI INTERNATIONAL AIRPORT, FL US SAN FRANCISCO INTERNATIONAL AIRPORT, CA US MIAMI INTERNATIONAL AIRPORT, FL US MIAMI INTERNATIONAL AIRPORT, FL US SAN FRANCISCO IN

我有一个数据框,它有一个带有机场名称的现有列,我想用它们的缩写创建另一个列

例如,我有一个具有以下值的现有列:

SEATTLE TACOMA AIRPORT, WA US
MIAMI INTERNATIONAL AIRPORT, FL US
SAN FRANCISCO INTERNATIONAL AIRPORT, CA US
MIAMI INTERNATIONAL AIRPORT, FL US
MIAMI INTERNATIONAL AIRPORT, FL US
SAN FRANCISCO INTERNATIONAL AIRPORT, CA US
SEATTLE TACOMA AIRPORT, WA US

我想创建一个新专栏,其中包含相关缩写,例如SEA、MIA和SFO。我想我可以使用for循环来实现这一点,但我不太确定如何准确地编码它。

您可以在dataframe中添加新列,它将创建新dataframe
您可以使用dataframe.withColumn(newcolumnname,case语句将名称解码为缩写)

以下是两种示例方法:

  • 使用dict和UDF
  • 使用第二个数据帧连接
  • 从pyspark.sql.functions导入col、udf、StringType
    s=”“”\
    美国华盛顿州西雅图塔科马机场
    美国佛罗里达州迈阿密国际机场
    旧金山国际机场
    美国佛罗里达州迈阿密国际机场
    美国佛罗里达州迈阿密国际机场
    旧金山国际机场
    华盛顿州西雅图塔科马机场
    缩写={
    “西雅图塔科马机场”:“海”,
    “迈阿密国际机场”:“MIA”,
    “旧金山国际机场”:“SFO”,
    }
    df=spark.read.csv(sc.parallelize(s.splitlines()))
    打印(“==df==”)
    df.show()
    # =================================
    #  1. 使用自定义项
    # =================================
    打印(“==使用自定义项==”)
    udf_airport_to_abbr=udf(lambda airport:abbr[airport],StringType())
    df.带列(“缩写”,udf_机场至缩写(“c0”)).show()
    # =================================
    #  2. 使用连接
    # =================================
    #您可能希望以不同的方式创建此df;)
    df_abbrs=spark.read.csv(sc.parallelize([%s,%s”%x代表abbr.items()中的x)
    打印(“==df_缩写===”)
    df_缩写show()
    打印(“==使用联接==”)
    df.join(df_缩写,on=“\u c0”).show()
    
    输出:

    === df ===
    +--------------------+------+
    |                 _c0|   _c1|
    +--------------------+------+
    |SEATTLE TACOMA AI...| WA US|
    |MIAMI INTERNATION...| FL US|
    |SAN FRANCISCO INT...| CA US|
    |MIAMI INTERNATION...| FL US|
    |MIAMI INTERNATION...| FL US|
    |SAN FRANCISCO INT...| CA US|
    |SEATTLE TACOMA AI...| WA US|
    +--------------------+------+
    
    === using a UDF ===
    +--------------------+------+----+
    |                 _c0|   _c1|abbr|
    +--------------------+------+----+
    |SEATTLE TACOMA AI...| WA US| SEA|
    |MIAMI INTERNATION...| FL US| MIA|
    |SAN FRANCISCO INT...| CA US| SFO|
    |MIAMI INTERNATION...| FL US| MIA|
    |MIAMI INTERNATION...| FL US| MIA|
    |SAN FRANCISCO INT...| CA US| SFO|
    |SEATTLE TACOMA AI...| WA US| SEA|
    +--------------------+------+----+
    
    === df_abbrs ===
    +--------------------+---+
    |                 _c0|_c1|
    +--------------------+---+
    |SEATTLE TACOMA AI...|SEA|
    |MIAMI INTERNATION...|MIA|
    |SAN FRANCISCO INT...|SFO|
    +--------------------+---+
    
    === using a join ===
    +--------------------+------+---+
    |                 _c0|   _c1|_c1|
    +--------------------+------+---+
    |SEATTLE TACOMA AI...| WA US|SEA|
    |SEATTLE TACOMA AI...| WA US|SEA|
    |SAN FRANCISCO INT...| CA US|SFO|
    |SAN FRANCISCO INT...| CA US|SFO|
    |MIAMI INTERNATION...| FL US|MIA|
    |MIAMI INTERNATION...| FL US|MIA|
    |MIAMI INTERNATION...| FL US|MIA|
    +--------------------+------+---+