python - 在 DataFrame 上应用映射函数

标签 python apache-spark pyspark

我刚开始使用 databricks/pyspark。我正在使用 python/spark 2.1。我已将数据上传到表中。该表是一个充满字符串的列。我希望对列中的每个元素应用一个映射函数。我将表加载到数据框中:

df = spark.table("mynewtable")

我能看到的唯一方法是其他人说的是将其转换为 RDD 以应用映射函数,然后返回到数据帧以显示数据。但这会引发作业中止阶段失败:

df2 = df.select("_c0").rdd.flatMap(lambda x: x.append("anything")).toDF()

我只想对表中的数据应用任何类型的 map 函数。 例如,向列中的每个字符串附加一些内容,或对字符执行拆分,然后将其放回数据框中,以便我可以 .show() 或显示它。

最佳答案

你不能:

  • 使用 flatMap 因为它会压扁 Row
  • 您不能使用 append 因为:

    • tupleRow 没有附加方法
    • append(如果存在于集合中)针对副作用执行并返回 None

我会使用 withColumn:

df.withColumn("foo", lit("anything"))

但是 map 应该也能工作:

df.select("_c0").rdd.flatMap(lambda x: x + ("anything", )).toDF()

编辑(给出评论):

你可能想要一个udf

from pyspark.sql.functions import udf

def iplookup(s):
    return ... # Some lookup logic

iplookup_udf = udf(iplookup)

df.withColumn("foo", iplookup_udf("c0"))

默认的返回类型是StringType,所以如果你想要别的东西,你应该调整它。

关于python - 在 DataFrame 上应用映射函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45404644/

相关文章:

python - 如何在模板中迭代多维列表/字典

python - 图像分析曲线拟合

python - 在 VSCode 中运行任何 Python 脚本时出现 & "&"语法错误?

pyspark - 如何在pyspark中自动删除常量列?

apache-spark - 从 spark RDD 中删除空字符串

Python Spark - 如何创建一个新列,对数据帧上的现有列进行切片?

python - environment.yml中的pip包如何使用.condarc中提供的代理?

apache-spark - 将具有 UTC 偏移量的字符串转换为 Spark 时间戳

scala - 在 Spark 中读取 CSV 文件时出错 - Scala

java - 如何为每个 RDD Spark Streaming