在 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 中解决的错误。
免责声明:
这些都是严重的黑客行为,除非你绝望,否则应该避免。这些也没有经过适当的测试。可以的话最好更新一下
加载数据后触发随机播放,例如:
recordDataFrame.repartition("file_name")
或
recordDataFrame.orderBy("file_name")
如 high-performance-spark/high-performance-spark-examples 所示截断谱系
(代码已获得 GPL 许可,因此无法在此处复制,但主要思想是访问内部 Java RDD,对其进行缓存并重新创建 DataFrame):
cutLineage(recordDataFrame)
我在使用 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 中解决的错误。
免责声明:
这些都是严重的黑客行为,除非你绝望,否则应该避免。这些也没有经过适当的测试。可以的话最好更新一下
加载数据后触发随机播放,例如:
recordDataFrame.repartition("file_name")
或
recordDataFrame.orderBy("file_name")
如 high-performance-spark/high-performance-spark-examples 所示截断谱系 (代码已获得 GPL 许可,因此无法在此处复制,但主要思想是访问内部 Java RDD,对其进行缓存并重新创建 DataFrame):
cutLineage(recordDataFrame)