在 RDD PySpark 上执行操作

Perofrming the operations on RDD PySpark

我在使用 Python Spark API 时获取文件名时出现问题。例如

recordDataFrame=originalDataFrame \
                    .withColumn('file_name',input_file_name()) 

将 file_name 列添加到 dataFrame.The 列添加到数据帧

recordDataFrame.take(1)

上面显示了有值的列 但是当我将 dataFrame 转换为 RDD 或在 RDD 上循环时 file_name 列没有任何价值。

例如,

rdd_data=recordDataFrame.rdd
print(rdd_data.take(1))

这将显示具有空白值的 file_name 列 或者,如果我直接循环遍历数据帧,那么文件名也没有任何值

recordDataFrame.foreach(process_data)

但是如果我在添加列时将静态值传递给 file_name 而不是使用 input_file_name() 那么一切正常

这是一个已在 2.0.0 中解决的错误。

免责声明

这些都是严重的黑客行为,除非你绝望,否则应该避免。这些也没有经过适当的测试。可以的话最好更新一下

  1. 加载数据后触发随机播放,例如:

    recordDataFrame.repartition("file_name")
    

    recordDataFrame.orderBy("file_name")
    
  2. high-performance-spark/high-performance-spark-examples 所示截断谱系 (代码已获得 GPL 许可,因此无法在此处复制,但主要思想是访问内部 Java RDD,对其进行缓存并重新创建 DataFrame):

    cutLineage(recordDataFrame)