在同一调用中从 Spark 数据帧拆分方法中选择数组元素



我正在拆分一个HTTP请求来查看元素,我想知道是否有办法指定我想在同一调用中查看的元素,而无需执行其他操作。

例如:

from pyspark.sql import functions as fn
df.select(fn.split(df.http_request, '/').alias('http'))

给了我一个新的Dataframe,里面有这样的数组行:

+--------------------+
|                http|
+--------------------+
|[, courses, 26420...|

我希望索引 1(课程)中的项目,而不必执行另一个 select 语句来指定df.select(df.http[1])或其他内容。 这可能吗?

使用 getItem。我想说的是,不要仅仅为了让代码看起来更漂亮而使用 python UDF - 它比本机 DataFrame 函数慢得多(由于在 python 和 JVM 之间移动数据)。

from pyspark.sql import functions as F
df.select(F.split(df.http_request, '/').alias('http').getItem(1))

使用 selectExpr 的替代方法:

df.selectExpr("http[1] as http_2nd_item")

你可以定义一个UDF

from pyspark.sql.functions import *
from pyspark.sql.types import *
def getter(column, index):
    return column[index]
getterUDF = udf(getter, StringType())
df.select(getterUDF(split(df.http_request, '/').alias('http'), lit(1)))

您也可以使用@max推荐的getItem方法

df.select(F.split(df.http_request, '/').alias('http').getItem(1))

相关内容

  • 没有找到相关文章

最新更新