【发布时间】:2018-03-14 13:55:46
【问题描述】:
这似乎与
有关How to change hdfs block size in pyspark?
我可以用rdd.saveAsTextFile成功改变hdfs块大小, 但不是对应的DataFrame.write.parquet,无法以parquet格式保存。
不确定是pyspark DataFrame中的错误还是我没有正确设置配置。
以下是我的测试代码:
##########
# init
##########
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
import hdfs
from hdfs import InsecureClient
import os
import numpy as np
import pandas as pd
import logging
os.environ['SPARK_HOME'] = '/opt/spark-2.2.1-bin-hadoop2.7'
block_size = 512 * 1024
conf = SparkConf().setAppName("myapp").setMaster("spark://spark1:7077").set('spark.cores.max', 20).set("spark.executor.cores", 10).set("spark.executor.memory", "10g").set("spark.hadoop.dfs.blocksize", str(block_size)).set("spark.hadoop.dfs.block.size", str(block_size))
spark = SparkSession.builder.config(conf=conf).getOrCreate()
spark.sparkContext._jsc.hadoopConfiguration().setInt("dfs.blocksize", block_size)
spark.sparkContext._jsc.hadoopConfiguration().setInt("dfs.block.size", block_size)
##########
# main
##########
# create DataFrame
df_txt = spark.createDataFrame([\{'temp': "hello"}, \{'temp': "world"}, \{'temp': "!"}])
# save using DataFrameWriter, resulting 128MB-block-size
df_txt.write.mode('overwrite').format('parquet').save('hdfs://spark1/tmp/temp_with_df')
# save using rdd, resulting 512k-block-size
client = InsecureClient('http://spark1:50070')
client.delete('/tmp/temp_with_rrd', recursive=True)
df_txt.rdd.saveAsTextFile('hdfs://spark1/tmp/temp_with_rrd')
【问题讨论】:
-
AFAIK Spark SQL 在 2.0 中停止使用 Hadoop 配置
-
@user69 它如何从 HDFS 读取或使用 YARN? hadoop 配置在会话的上下文中
-
看起来这是特定于镶木地板的问题。我可以使用 df.write.csv() 和 df.write.text() apache-spark-developers-list.1001551.n3.nabble.com/… 成功保存 512k 块大小
标签: hadoop apache-spark pyspark hdfs