小编pal*_*upz的帖子

如果 Spark 中的数据帧是不可变的,为什么我们能够使用诸如 withColumn() 之类的操作来修改它?

这可能是一个愚蠢的问题,源于我的无知。我已经在 PySpark 上工作了几个星期,并没有太多的编程经验可以开始。

我的理解是,在 Spark 中,RDD、数据帧和数据集都是不可变的——我再次理解,这意味着您无法更改数据。如果是这样,为什么我们能够使用 编辑 Dataframe 的现有列withColumn()

apache-spark pyspark

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

Spark:repartition 和 repartitionByRange 有什么区别?

我在这里浏览了文档:https : //spark.apache.org/docs/latest/api/python/pyspark.sql.html

它说:

  • 用于重新分区:生成的 DataFrame 是散列分区的。
  • 对于 repartitionByRange:生成的 DataFrame 是范围分区的。

前面的问题也提到了它。但是,我仍然不明白它们究竟有何不同,以及在选择其中一个时会产生什么影响?

更重要的是,如果 repartition 进行哈希分区,提供列作为其参数有什么影响?

apache-spark apache-spark-sql pyspark

7
推荐指数
2
解决办法
2406
查看次数

Spark:如果数据框中不存在列,则返回空列

如下面的代码所示,我正在将一个 JSON 文件读入一个数据帧,然后从该数据帧中选择一些字段到另一个字段中。

df_record = spark.read.json("path/to/file.JSON",multiLine=True)

df_basicInfo = df_record.select(col("key1").alias("ID"), \
                                col("key2").alias("Status"), \
                                col("key3.ResponseType").alias("ResponseType"), \
                                col("key3.someIndicator").alias("SomeIndicator") \
                                )
Run Code Online (Sandbox Code Playgroud)

问题是,有时,JSON 文件没有我尝试获取的某些键,例如ResponseType. 所以它最终会抛出如下错误:

org.apache.spark.sql.AnalysisException: No such struct field ResponseType
Run Code Online (Sandbox Code Playgroud)

如何在不强制使用模式的情况下解决此问题?当它不可用时,是否可以使其在该列下返回 NULL?

我如何检测 spark 数据帧是否有列确实提到了如何检测数据帧中的列是否可用。然而,这个问题是关于如何使用该功能。

apache-spark apache-spark-sql pyspark pyspark-sql

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

在 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:如何更新嵌套列?

StackOverflow 有一些关于如何更新数据框中嵌套列的答案。但是,其中一些看起来有点复杂。

在搜索时,我从 DataBricks 中找到了处理相同场景的文档:https ://docs.databricks.com/user-guide/faq/update-nested-column.html

val updated = df.selectExpr("""
    named_struct(
        'metadata', metadata,
        'items', named_struct(
          'books', named_struct('fees', items.books.fees * 1.01),
          'paper', items.paper
        )
    ) as named_struct
""").select($"named_struct.metadata", $"named_struct.items")
Run Code Online (Sandbox Code Playgroud)

这看起来也很干净。不幸的是,我不知道 Scala。我将如何将其翻译成 Python?

scala apache-spark apache-spark-sql pyspark

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