在RDD PySpark上执行操作

时间:2016-07-26 14:02:51

标签: python-2.7 apache-spark pyspark apache-spark-sql rdd

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

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

将file_name列添加到dataFrame。该列已添加到dataFrame

recordDataFrame.take(1)

上方显示具有值的列 但是当我将dataFrame转换为RDD或通过RDD file_name列循环时,没有任何值。

例如,

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

这将显示带有空值的file_name列 或者如果我直接在dataFrame上循环,那么文件名也没有任何值

recordDataFrame.foreach(process_data)

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

1 个答案:

答案 0 :(得分:1)

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

免责声明

这些是严重的黑客攻击,除非你绝望,否则应该避免。还没有对这些进行适当的测试。如果可以,最好更新。

  1. 在加载数据后触发一个shuffle,例如:

    recordDataFrame.repartition("file_name")
    

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

    cutLineage(recordDataFrame)