相关疑难解决方法(0)

Pyspark 根据另一列中的模式替换列中的字符串

我有一个带有文本列和名称列的数据框。我想检查该名称是否存在于文本列中,以及是否存在将其替换为某个值。我希望以下内容能够发挥作用:

df = df.withColumn("new_text",regex_replace(col("text),col("name"),"NAME"))
Run Code Online (Sandbox Code Playgroud)

但 Column 不可迭代,因此它不起作用。我必须写一个 udf 才能做到这一点吗?那会是什么样子?

pyspark

3
推荐指数
1
解决办法
3890
查看次数

如何在 Spark 中动态切片数组列?

Spark 2.4 引入了新的 SQL 函数slice,可用于从数组列中提取一定范围的元素。我想根据一个整数列动态定义每行的范围,该列具有我想从该列中选择的元素数。

但是,简单地将列传递给 slice 函数会失败,该函数似乎需要整数作为起始值和结束值。有没有办法在不编写 UDF 的情况下做到这一点?

用一个例子来形象化这个问题:我有一个带有数组列的数据框,arr在每一行中都有一个看起来像['a', 'b', 'c']. 还有一个end_idx包含元素的列31并且2

+---------+-------+
|arr      |end_idx|
+---------+-------+
|[a, b, c]|3      |
|[a, b, c]|1      |
|[a, b, c]|2      |
+---------+-------+
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个这样的新列arr_trimmed

+---------+-------+
|arr      |end_idx|
+---------+-------+
|[a, b, c]|3      |
|[a, b, c]|1      |
|[a, b, c]|2      |
+---------+-------+
Run Code Online (Sandbox Code Playgroud)

我希望这个代码与内容创建新列['a', 'b', 'c']['a']['a', 'b']

相反,我收到一个错误TypeError: Column is not iterable …

python apache-spark apache-spark-sql pyspark

3
推荐指数
1
解决办法
4686
查看次数

如何在pyspark中使用带有两列的date_add?

我有一个包含一些列的数据框:

+------------+--------+----------+----------+
|country_name| ID_user|birth_date|      psdt|
+------------+--------+----------+----------+
|      ??????|16460783|       486|1970-01-01|
|      ??????|16467391|      4669|1970-01-01|
|      ??????|16467889|      6861|1970-01-01|
|   ?????????|16468013|      5360|1970-01-01|
|      ??????|16471027|      6311|1970-01-01|
|      ??????|16474162|      5567|1970-01-01|
|      ??????|16476386|      4351|1970-01-01|
|      ??????|16481067|      3831|1970-01-01|
|   ?????????|16485965|     -2369|1970-01-01|
|    ????????|16486027|      5864|1970-01-01|
+------------+--------+----------+----------+
only showing top 10 rows
Run Code Online (Sandbox Code Playgroud)

我需要用“birth_date”添加“psdt”。我写了这段代码,但 (sf.date_add) 不起作用:

resultbirthDF =(
        resultDF
        .select(sf.col("country_name"),
                sf.col("ID_user"),
                sf.col("birth_date"),
                sf.lit(past_datetr).alias("psdt")
               )
        .withColumn("birth_datetrue",sf.date_add(sf.to_date(sf.col("psdt")),sf.col("birth_date")))
    ).show(10)

'Column' object is not callable
Traceback (most recent call last):
  File "/volumes/disk1/yarn/local/usercache/livy/appcache/application_1573843665329_0786/container_e05_1573843665329_0786_01_000001/pyspark.zip/pyspark/sql/functions.py", line 1006, in date_add
    return Column(sc._jvm.functions.date_add(_to_java_column(start), days))
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题呢?

apache-spark apache-spark-sql pyspark

3
推荐指数
1
解决办法
2703
查看次数

在 PySpark 中,使用 regexp_replace,如何用另一列的值替换组?

我有一个包含两列的数据框:filenameyear。我想filenameyear列中的值替换年份值

下表中的第三列显示了要求:

+----------------------------+------+----------------------------+
| filename                   | year | reqd_filename              |
+----------------------------+------+----------------------------+
| blah_2020_v1_blah_blah.csv | 1975 | blah_1975_v1_blah_blah.csv |
+----------------------------+------+----------------------------+
| blah_2019_v1_blah_blah.csv | 1984 | blah_1984_v1_blah_blah.csv |
+----------------------------+------+----------------------------+
Run Code Online (Sandbox Code Playgroud)

代码目前如下所示:

df = df.withColumn('filename', F.regexp_replace(F.col('filename',), '(blah_)(.*)(_v1.*)', <Nothing I put here works>))
Run Code Online (Sandbox Code Playgroud)

简而言之,我想用yeardf 中的列替换第二组

python apache-spark apache-spark-sql pyspark pyspark-dataframes

2
推荐指数
1
解决办法
463
查看次数

Pyspark - 从每列中选择不同的值

我试图在数据框中的每一列中找到所有不同的值并显示在一个表中。

示例数据:

|-----------|-----------|-----------|
|   COL_1   |   COL_2   |   COL_3   | 
|-----------|-----------|-----------|
|     A     |     C     |     D     |
|     A     |     C     |     D     |
|     A     |     C     |     E     |
|     B     |     C     |     E     |
|     B     |     C     |     F     |
|     B     |     C     |     F     |
|-----------|-----------|-----------|
Run Code Online (Sandbox Code Playgroud)

示例输出:

|-----------|-----------|-----------|
|   COL_1   |   COL_2   |   COL_3   | 
|-----------|-----------|-----------|
|     A     |     C     |     D     |
|     B     |           |     E     |
|           |           | …
Run Code Online (Sandbox Code Playgroud)

python python-3.x apache-spark pyspark pyspark-sql

1
推荐指数
1
解决办法
5015
查看次数