将多个转换应用于 apache RDD 的最佳方法是什么?
what is the best approach to apply multiple transformations to an apache RDD?
我有包含大量或 ndline json 数据的大文件。我正在尝试使用气流处理 EMR 集群中的这些文件以获取一组新文件。我应该在 EMR 中使用多个步骤还是在一个 pyspark 脚本中进行所有处理并只向 EMR 发送一个步骤?
这是一个例子:
数据文件:
{"key": {"nested_key": "value"}}
{"key": {"nested_key": "value2"}}
结果文件:
{"nested_key": "value", "nested_hashed": hashed_value}
{"nested_key": "value2", "nested_hashed": hashed_value2}
pyspark 代码
def flatenize(data):
data = json.loads(data)
return json.dumps(data['key'])
def hash_data(data):
data = json.loads(data)
data['nested_hashed'] = hash(data['nested_key'])
return json.dumps(data)
def main()
sparkccontext = pyspark.SparkContext(master='local[4]', appName='test')
input = args.input_files
output = args.output_files
rdd = sparkccontext.textFile(input)
flatrdd = rdd.map(flatenize)
output_rdd = flatrdd.map(hash_data)
output_rdd.saveAsTextFile(output)
运行 这 2 个地图在 2 个单独的脚本中会更好吗?
看来最好的方法是像这样链接所有操作:
output_rdd = flatrdd.map(flatenize).map(hash_data)
我有包含大量或 ndline json 数据的大文件。我正在尝试使用气流处理 EMR 集群中的这些文件以获取一组新文件。我应该在 EMR 中使用多个步骤还是在一个 pyspark 脚本中进行所有处理并只向 EMR 发送一个步骤?
这是一个例子:
数据文件:
{"key": {"nested_key": "value"}}
{"key": {"nested_key": "value2"}}
结果文件:
{"nested_key": "value", "nested_hashed": hashed_value}
{"nested_key": "value2", "nested_hashed": hashed_value2}
pyspark 代码
def flatenize(data):
data = json.loads(data)
return json.dumps(data['key'])
def hash_data(data):
data = json.loads(data)
data['nested_hashed'] = hash(data['nested_key'])
return json.dumps(data)
def main()
sparkccontext = pyspark.SparkContext(master='local[4]', appName='test')
input = args.input_files
output = args.output_files
rdd = sparkccontext.textFile(input)
flatrdd = rdd.map(flatenize)
output_rdd = flatrdd.map(hash_data)
output_rdd.saveAsTextFile(output)
运行 这 2 个地图在 2 个单独的脚本中会更好吗?
看来最好的方法是像这样链接所有操作:
output_rdd = flatrdd.map(flatenize).map(hash_data)